在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写的一个squid访问日志分析的小程序
Sep 17 Python
在Python web中实现验证码图片代码分享
Nov 09 Python
Python实现邮件的批量发送的示例代码
Jan 23 Python
python 高效去重复 支持GB级别大文件的示例代码
Nov 08 Python
Django实现微信小程序的登录验证功能并维护登录态
Jul 04 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
使用python telnetlib批量备份交换机配置的方法
Jul 25 Python
深入学习python多线程与GIL
Aug 26 Python
python实现飞机大战小游戏
Nov 08 Python
keras K.function获取某层的输出操作
Jun 29 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
Jun 01 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
laravel安装和配置教程
2014/10/29 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
JavaScript中的fontsize()方法使用详解
2015/06/08 Javascript
javaScript数组迭代方法详解
2016/04/14 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
python解析模块(ConfigParser)使用方法
2013/12/10 Python
Django URL传递参数的方法总结
2016/08/28 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
学前教育专业毕业生自荐信
2013/10/03 职场文书
自荐信包含哪些内容
2013/10/30 职场文书
爷爷追悼会答谢词
2014/01/24 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
安全生产演讲稿
2014/05/09 职场文书
希特勒的演讲稿
2014/05/23 职场文书
义诊活动总结
2015/02/04 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS
这样写python注释让代码更加的优雅
2021/06/02 Python