在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 20 Python
python 实现一个贴吧图片爬虫的示例
Oct 12 Python
Python列表删除的三种方法代码分享
Oct 31 Python
pandas数据框,统计某列数据对应的个数方法
Apr 11 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
selenium+python环境配置教程详解
May 28 Python
用python写一个定时提醒程序的实现代码
Jul 22 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
Jan 13 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
Feb 26 Python
Python析构函数__del__定义原理解析
Nov 20 Python
手把手教你使用TensorFlow2实现RNN
Jul 15 Python
OpenCV项目实践之停车场车位实时检测
Apr 11 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面向对象全攻略 (五) 封装性
2009/09/30 PHP
php对数组排序的简单实例
2013/12/25 PHP
php实现httpRequest的方法
2015/03/13 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
YUI的Tab切换实现代码
2010/04/11 Javascript
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
动态创建按钮的JavaScript代码
2016/01/29 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
Python字典简介以及用法详解
2016/11/15 Python
使用python画个小猪佩奇的示例代码
2018/06/06 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
2020/10/15 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
python中使用np.delete()的实例方法
2021/02/01 Python
俄罗斯女装店:12storeez
2019/10/25 全球购物
注塑工厂厂长岗位职责
2013/12/02 职场文书
11月红领巾广播稿
2014/01/17 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
入职担保书怎么写
2014/05/12 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
表扬信范文
2015/05/04 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python