opencv+python机读卡识别(二)边缘检测及分割
2017-07-09 00:00
627 查看
摘要: 机读卡边缘检测及分割
第一部分预处理:https://my.oschina.net/u/3268732/blog/1236298
第三部分选择题识别:https://my.oschina.net/u/3268732/blog/1237819
第四部分数字识别:https://my.oschina.net/u/3268732/blog/1239954
1.边缘检测
预处理得到二值图像就很容易做边缘检测了,找出4个点,方便之后的4点变换
顶点坐标的存放形式为3维数组,所以若想演示最大的4个顶点应做如下操作:
2.四点变换
四点变换直接调用大佬写好放在imutils中的函数就好了。这里存了两个,一个原图一个灰度图,原图用来配合展示,灰度图用来支配
第一部分预处理:https://my.oschina.net/u/3268732/blog/1236298
第三部分选择题识别:https://my.oschina.net/u/3268732/blog/1237819
第四部分数字识别:https://my.oschina.net/u/3268732/blog/1239954
1.边缘检测
预处理得到二值图像就很容易做边缘检测了,找出4个点,方便之后的4点变换
#canny边缘检测 edged = cv2.Canny(blurred, 10, 100) # 从边缘图中寻找轮廓,然后初始化答题卡对应的轮廓 ''' findContours image -- 要查找轮廓的原图像 mode -- 轮廓的检索模式,它有四种模式: cv2.RETR_EXTERNAL 表示只检测外轮廓 cv2.RETR_LIST 检测的轮廓不建立等级关系 cv2.RETR_CCOMP 建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体, 这个物体的边界也在顶层。 cv2.RETR_TREE 建立一个等级树结构的轮廓。 method -- 轮廓的近似办法: cv2.CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max (abs (x1 - x2), abs(y2 - y1) == 1 cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需 4个点来保存轮廓信息 cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法 ''' cnts = cv2.findContours(edged, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) cnts = cnts[0] if imutils.is_cv2() else cnts[1] docCnt = None # 确保至少有一个轮廓被找到 if len(cnts) > 0: # 将轮廓按大小降序排序 cnts = sorted(cnts, key=cv2.contourArea, reverse=True) # 对排序后的轮廓循环处理 for c in cnts: # 获取近似的轮廓 peri = cv2.arcLength(c, True) approx = cv2.approxPolyDP(c, 0.02 * peri, True) # 如果近似轮廓有四个顶点,那么就认为找到了答题卡 if len(approx) == 4: docCnt = approx break
顶点坐标的存放形式为3维数组,所以若想演示最大的4个顶点应做如下操作:
newimage=image.copy() for i in docCnt: #circle函数为在图像上作图,新建了一个图像用来演示四角选取 cv2.circle(newimage, (i[0][0],i[0][1]), 50, (255, 0, 0), -1)
2.四点变换
四点变换直接调用大佬写好放在imutils中的函数就好了。这里存了两个,一个原图一个灰度图,原图用来配合展示,灰度图用来支配
paper = four_point_transform(image, docCnt.reshape(4, 2)) warped = four_point_transform(gray, docCnt.reshape(4, 2))
相关文章推荐
- OpenCV图像识别、移动侦测、边缘检测实现及 cvCopy()和cvCloneImage()的区别
- 计算机视觉领域不同的方向:目标识别、目标检测、语义分割等
- [置顶] 边缘检测与图像分割
- U-net使用, 图像分割(边缘检测)
- 图像分割与边缘检测
- 图像分割之(五)边缘检测Laplace详解
- 边缘检测与图像分割
- OpenCV图像识别、移动侦测、边缘检测实现及 cvCopy()和cvCloneImage()的区别
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
- 冈萨雷斯数字图像处理学习7:图像分割 点线和边缘的检测
- 图像分割-边缘检测
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
- 图像分割之边缘检测
- U-net使用, 图像分割(边缘检测)
- Opencv图像识别从零到精通(19)----Robert,prewitt,Sobel边缘检测
- 文字检测与识别4-过分割和beam search
- C#下用Emgucv对图片进行灰度化、二值化、边缘检测、膨胀腐蚀运算、霍夫变换进行表格识别
- OpenCV Using Python——边缘检测和Otsu方法背景分割
- U-net使用, 图像分割(边缘检测)
- 图像识别中,目标分割、目标识别、目标检测和目标跟踪这几个方面区别是什么?+资料列表