在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实现dnspod自动更新dns解析的方法
Feb 14 Python
Python入门篇之面向对象
Oct 20 Python
Python黑帽编程 3.4 跨越VLAN详解
Sep 28 Python
Python 描述符(Descriptor)入门
Nov 20 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
sublime python3 输入换行不结束的方法
Apr 19 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
Python异常处理例题整理
Jul 07 Python
tensorflow指定GPU与动态分配GPU memory设置
Feb 03 Python
Visual Studio Code搭建django项目的方法步骤
Sep 17 Python
python基于爬虫+django,打造个性化API接口
Jan 21 Python
python sleep和wait对比总结
Feb 03 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原理之异常机制
2010/08/21 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
2015/10/10 PHP
Yii2实现多域名跨域同步登录退出
2017/02/04 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
jquery下将选择的checkbox的id组成字符串的方法
2010/11/28 Javascript
js 操作select与option(示例讲解)
2013/12/20 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
javascript实现简单的页面右下角提示信息框
2015/07/31 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
javascript数据类型验证方法
2015/12/31 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
js实现旋转木马效果
2017/03/17 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
详解微信小程序开发用户授权登陆
2019/04/24 Javascript
vuex存储token示例
2019/11/11 Javascript
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
python爬虫基础教程:requests库(二)代码实例
2019/04/09 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
python str字符串转uuid实例
2020/03/03 Python
护士毕业生自我鉴定
2014/02/08 职场文书
四查四看剖析材料
2014/02/14 职场文书
2014年合同管理工作总结
2014/12/02 职场文书
初中信息技术教学反思
2016/02/16 职场文书
个人向公司借款协议书
2016/03/19 职场文书
python中如何对多变量连续赋值
2021/06/03 Python
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL