在OpenCV里实现条码区域识别的方法示例
技术  /  管理员 发布于 7年前   179
在我们识别条码的过程里,首先要找到条码所在的区域,那么怎么样来找到这个条码的区域呢?如果仔细地观察条码,会发现条码有一个特性,就是水平的梯度和垂值的梯度会不一样,如果进行相减,会发现差值比较大。如果其它位置的图像一般不会这样。利用这个特性,就可以把条码所在区域求出来。
演示的代码如下:
#python 3.7.4,opencv4.1#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579#[email protected]#import numpy as npimport cv2from matplotlib import pyplot as plt #读取图片img = cv2.imread('barcode6.jpg')#gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)cv2.imshow('gray', gray) gradX = cv2.Sobel(gray, ddepth=cv2.CV_32F, dx=1, dy=0, ksize=-1)gradY = cv2.Sobel(gray, ddepth=cv2.CV_32F, dx=0, dy=1, ksize=-1) gradient = cv2.subtract(gradX, gradY)gradient = cv2.convertScaleAbs(gradient)cv2.imshow('gradient', gradient) blurred = cv2.blur(gradient, (9, 9))(_, thresh) = cv2.threshold(blurred, 225, 255, cv2.THRESH_BINARY)cv2.imshow('thresh', thresh) kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (21, 7))closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel) closed = cv2.erode(closed, None, iterations = 4)closed = cv2.dilate(closed, None, iterations = 4)cv2.imshow('closed', closed) cnts,hierarchy = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)c = sorted(cnts, key = cv2.contourArea, reverse = True)[0] #找最大的边框rect = cv2.minAreaRect(c)box = cv2.boxPoints(rect)box = np.int0(box) # 画一个找到的方框cv2.drawContours(img, [box], -1, (0, 255, 0), 3) cv2.imshow('img', img) #cv2.waitKey(0)cv2.destroyAllWindows()
结果输出如下:
转换为灰度图
X轴梯度减去Y轴梯度求绝对值
经过阈值处理后的图片
经过形态学处理后的图片
最后的输出结果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号