在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的Flask框架标配模板引擎Jinja2的使用教程
Jul 12 Python
利用python求相邻数的方法示例
Aug 18 Python
python实现决策树ID3算法的示例代码
May 30 Python
Python根据成绩分析系统浅析
Feb 11 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
使用python socket分发大文件的实现方法
Jul 08 Python
tensorflow 实现从checkpoint中获取graph信息
Feb 10 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
PyQt5实现画布小程序
May 30 Python
详解python日志输出使用配置文件格式
Feb 10 Python
python运算符之与用户交互
Apr 13 Python
python如何为list实现find方法
May 30 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
浅析PKI加密解密 OpenSSL
2013/07/01 PHP
详细解读PHP的Yii框架中登陆功能的实现
2015/08/21 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
使用contextMenu插件实现Bootstrap table弹出右键菜单
2017/02/20 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
2017/03/23 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
js使用原型对象(prototype)需要注意的地方
2017/08/28 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
2020/09/21 Javascript
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python实现根据指定端口探测服务器/模块部署的方法
2014/08/25 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
想学python 这5本书籍你必看!
2018/12/11 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
python中xlutils库用法浅析
2020/12/29 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
美国儿童服装、家具和玩具精品店:Maisonette
2019/11/24 全球购物
医校毕业生自我鉴定
2014/01/25 职场文书
遗嘱继承公证书
2014/04/09 职场文书
教师工作自我鉴定范文
2014/09/14 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书