opencv识别彩色二维码

记录一下识别彩色二维码过程,以及当中遇到的问题和解决办法

1. 由于过程中图片处理需要用到灰度图像,所以读取原图之后,需要转换一个grayImage (CV_BGR2GRAY)

2. GaussianBlur 和 Canny 处理图像, 消除噪声

3. 由于图像可能出现的不连续等情况,之后使用findContours找轮廓会遇到问题,所以先经过dilate 和 erode 处理图像

4. 使用findContours查找最外围轮廓,共分为四个轮廓,三个圆用于定位,一个中心的数据区域

5. 画轮廓(drawContours);分为两个image,一个是三个圆的circleImage,一个是中心的dataImage;circleImage只花轮廓即可,dataImage使用CV_FILLED参数填补

6. HoughCircles从circleImage中查找圆,找到直角顶点到斜边的中线,由于是等腰直角三角形(理论上是的,会有误差,可忽略),所以通过这个中线的向量去计算图像的倾斜度,然后进行旋转;由于是用的中线,所以要额外逆时针多旋转45° 角

7. 使用warpAffine 选择原图像,并使用白色背景填充,最后一个参数 Scalar即可

8. 同时旋转dataImage

9. 通过dataImage,查找最大,最小 的x 和 y 坐标,共四个值。

10. 由于方格个数固定,每行是47个,所以可计算间距,即之后循环的步长

11. 处理原图,范围是最大最小x y坐标内的图像,并且步长是上一步计算的结果。同时,判断像素是否在dataimage的轮廓内。如果不在,丢弃(说明是定位的圆 区域)

12. 每两个方格组成一个字符串,拼接,输出。

done.

你可能感兴趣的:(opencv,opencv,二维码,彩色二维码,c)