在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 相关文章推荐
Linux环境下MySQL-python安装过程分享
Feb 02 Python
Python即时网络爬虫项目启动说明详解
Feb 23 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
python安装模块如何通过setup.py安装(超简单)
May 05 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
May 24 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
Django csrf 验证问题的实现
Oct 09 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
pytorch中的上采样以及各种反操作,求逆操作详解
Jan 03 Python
在flask中使用python-dotenv+flask-cli自定义命令(推荐)
Jan 05 Python
Python文件读写w+和r+区别解析
Mar 26 Python
Python自动创建Excel并获取内容
Sep 16 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简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
PHP的Trait机制原理与用法分析
2019/10/18 PHP
javascript动态加载二
2012/08/22 Javascript
JQuery实现倒计时按钮具体方法
2013/11/14 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
Jquery解析json字符串及json数组的方法
2015/05/29 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
JavaScript创建、读取和删除cookie
2019/09/03 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
python读写csv文件的方法
2019/08/13 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
Python:slice与indices的用法
2019/11/25 Python
Python class的继承方法代码实例
2020/02/14 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
详解Django中异步任务之django-celery
2020/11/05 Python
CSS3媒体查询Media Queries基础学习教程
2016/02/29 HTML / CSS
工商管理专业学生的自我评价
2013/10/01 职场文书
电子信息毕业生自荐信
2013/11/16 职场文书
平面设计师工作职责范文
2013/12/03 职场文书
股东协议书
2014/04/14 职场文书
白岩松演讲
2014/05/21 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
旅游局领导班子“四风”问题对照检查材料思想汇报
2014/09/29 职场文书
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
详解Flask开发技巧之异常处理
2021/06/15 Python
Fluentd搭建日志收集服务
2022/09/23 Servers