条形码识别(2)——获取条形码条空(bar&space)宽度
来源:互联网 发布:阿里域名购买 编辑:程序博客网 时间:2024/05/07 07:20
条形码识别(2)——获取条形码条空(bar&space)宽度
标签: 机器视觉 条形码识别 Python
请先阅读条形码识别(1)——基础知识
1.目标
- 条形码与其表示的数字字符按照下表对应,其中
1
表示一个单位黑条,0
表示一个单位白空
比如下图就表示左侧字符1的奇数编码(A子集)
条形码从起始符到终止符一共有59个bar和space,95个单位长度
- 获得从起始符到终止符的像素宽度,然后除以95,就可以得到单位长度的像素数
- 将每个bar和space的像素宽度除以单位长度的像素数,就可以得到每个bar和space在表中的宽度
举个例子,从起始符到终止符一共有190个像素,那么单位长度的像素数就是(190/95=2),某个字符的bar和space宽度是[4, 4, 4, 2],将其转化为表中的宽度[2, 2, 2, 1],查表可得该字符为1
2.算法
- 获取条形码bar和space宽度最简单的方法就是沿着某一行从头至尾扫描,简便起见,先只扫描一行,且该行为条形码中间行
- 对图像应当进行简单的预处理,灰度化(多通道图转为单通道图)->二值化->中值滤波
- 设置3个变量,
currentPix
表示当前像素值,pos
表示上次像素值变化的位置,lastPix
表示上次像素值变化的位置的像素,当currentPix != lastPix
时,记录下当前位置与pos
的差,即当前bar或者space的宽度,然后更新pos
和lastPix
,继续遍历直到该行结束 - 条形码从起始符到终止符一共有59个bar或者space,因为是从行的起始位置开始扫描,所以左侧空白区也被扫描进去了,因此最终bar和space的数量为(60=59+1)
3.实现
#创建:2016/01/26#文件:BarCodeIdentification.py#作者:moverzp#功能:识别条形码import sysimport cv2def get_bar_space_width(img): row = img.shape[0] *1/2#img.shape[0]表示图像的总行数 currentPix = -1#初始化 lastPix = -1 pos = 0 width = [] for i in range(img.shape[1]):#遍历一整行 currentPix = img[row][i] if currentPix != lastPix: if lastPix == -1: lastPix = currentPix pos = i else: width.append( i - pos ) pos = i lastPix = currentPix return width#载入图像img = cv2.imread('res\google6.jpg')grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#转换成单通道图像ret, grayImg = cv2.threshold(grayImg, 200, 255, cv2.THRESH_BINARY)#二值化grayImg = cv2.medianBlur(grayImg, 3)#中值滤波#提取条空宽度barSpaceWidth = get_bar_space_width(grayImg)print 'bar & space\'s numbers:', len(barSpaceWidth)#只有60是正确的print barSpaceWidth
检测的图片:
检测结果:
- 第一个数值77表示左侧空白区
- 起始符和终止符分别是[4,5,4], [4,4,4],宽度比是1:1:1,说明检测正确
4.总结
- 检测bar和space宽度是关键的一步,最简单的方法是沿着某一行从头至尾扫描,记录下像素值变化的下标差,即为当前bar或者space宽度
- 实际情况中会扫描多行,以减小误差,提高精度
- 如果某行扫描的bar和space数量不是60,应当舍弃改行数据
0 0
- 条形码识别(2)——获取条形码条空(bar&space)宽度
- 条形码识别(1)——基础知识
- 条形码识别(3)——译码
- 条形码识别(4)——校验
- java 条形码识别(zxing)
- 条形码识别
- 识别条形码
- 识别条形码
- Bar Code (条形码) 打印出现乱码的问题解决方案
- halcon学习笔记——实例篇(1)条形码识别
- halcon学习笔记——实例篇(3)条形码识别
- halcon学习笔记——实例篇(3)条形码识别 转
- halcon学习笔记——实例篇(3)条形码识别
- bar code (条形码)
- Opencv+Zbar二维码识别(标准条形码/二维码识别)
- Opencv+Zbar二维码识别(标准条形码/二维码识别)
- Opencv+Zbar二维码识别(标准条形码/二维码识别)
- Opencv+Zbar二维码识别(标准条形码/二维码识别)
- OC代码风格规范
- 【数据结构和算法】Hash Table
- this.getHibernateTemplate()空指针
- 数据结构基础(5) --归并排序
- 虚幻引擎 4.10 发布信息
- 条形码识别(2)——获取条形码条空(bar&space)宽度
- Mysql事件学习
- greenplum维护中的一些技巧
- web 及时通讯
- iOS开发手写分页
- mysql读取自动增长主键值
- 日历2
- Spring JdbcTemplate 批量插入或更新操作
- gridView属性