在OpenCV里实现条码区域识别的方法示例


Posted in Python onDecember 04, 2019

在我们识别条码的过程里,首先要找到条码所在的区域,那么怎么样来找到这个条码的区域呢?如果仔细地观察条码,会发现条码有一个特性,就是水平的梯度和垂值的梯度会不一样,如果进行相减,会发现差值比较大。如果其它位置的图像一般不会这样。利用这个特性,就可以把条码所在区域求出来。

演示的代码如下:

#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#9073204@qq.com
#
import numpy as np
import cv2
from 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()

结果输出如下:

在OpenCV里实现条码区域识别的方法示例

转换为灰度图

在OpenCV里实现条码区域识别的方法示例

X轴梯度减去Y轴梯度求绝对值

在OpenCV里实现条码区域识别的方法示例

经过阈值处理后的图片

在OpenCV里实现条码区域识别的方法示例

经过形态学处理后的图片

在OpenCV里实现条码区域识别的方法示例

最后的输出结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python列表去重的二种方法
Feb 14 Python
python中的reduce内建函数使用方法指南
Aug 31 Python
深入理解python中的atexit模块
Mar 07 Python
Python优先队列实现方法示例
Sep 21 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
May 18 Python
Python Pandas批量读取csv文件到dataframe的方法
Oct 08 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
使用Python为中秋节绘制一块美味的月饼
Sep 11 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
Aug 07 Python
Python经典五人分鱼实例讲解
Jan 04 Python
Python绘图实现显示中文
Dec 04 #Python
Python图片的横坐标汉字实例
Dec 04 #Python
使用Pandas的Series方法绘制图像教程
Dec 04 #Python
Python FFT合成波形的实例
Dec 04 #Python
使用python动态生成波形曲线的实现
Dec 04 #Python
python3实现绘制二维点图
Dec 04 #Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 #Python
You might like
php的控制语句
2006/10/09 PHP
php 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
php的4种常用运行方式详解
2016/12/22 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
使用Mootools动态添加Css样式表代码,兼容各浏览器
2011/12/12 Javascript
jquery 追加tr和删除tr示例代码
2013/09/12 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
微信小程序 教程之WXML
2016/10/18 Javascript
教你用十行node.js代码读取docx的文本
2017/03/08 Javascript
原生JS实现导航下拉菜单效果
2020/11/25 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
Python中统计函数运行耗时的方法
2015/05/05 Python
深入浅出学习python装饰器
2017/09/29 Python
Python第三方Window模块文件的几种安装方法
2018/11/22 Python
python视频按帧截取图片工具
2019/07/23 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
Django实现简单的分页功能
2021/02/22 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
德国网上花店:Valentins
2018/08/15 全球购物
Linux文件系统类型
2012/02/15 面试题
交通事故赔偿协议书范本
2014/04/15 职场文书
化工操作工岗位职责
2014/04/29 职场文书
保管员岗位职责
2015/02/14 职场文书
社会实践单位意见
2015/06/05 职场文书
php引用传递
2021/04/01 PHP