在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 相关文章推荐
windows上安装Anaconda和python的教程详解
Mar 28 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
Sep 11 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
Jul 19 Python
使用TensorFlow实现简单线性回归模型
Jul 19 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
Mar 02 Python
解决python3插入mysql时内容带有引号的问题
Mar 02 Python
Python调用.net动态库实现过程解析
Jun 05 Python
Python max函数中key的用法及原理解析
Jun 26 Python
Django框架中模型的用法
Jun 10 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函数
2008/10/03 PHP
Zend Studio for Eclipse的java.lang.NullPointerException错误的解决方法
2008/12/06 PHP
经典PHP加密解密函数Authcode()修复版代码
2015/04/05 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
PHP实现抓取迅雷VIP账号的方法
2015/07/30 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
webstorm添加*.vue文件支持
2018/05/08 Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
2018/06/06 Javascript
layui 给数据表格加序号的方法
2018/08/20 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
Python实现简单状态框架的方法
2015/03/19 Python
python实现ping的方法
2015/07/06 Python
判断网页编码的方法python版
2016/08/12 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
Python调用.NET库的方法步骤
2019/12/27 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
python判断是空的实例分享
2020/07/06 Python
python统计mysql数据量变化并调用接口告警的示例代码
2020/09/21 Python
python3 kubernetes api的使用示例
2021/01/12 Python
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
德国网上药房:Apotal
2017/04/04 全球购物
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
高级技校毕业生自荐信
2013/11/18 职场文书
七年级政治教学反思
2014/02/03 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
世界气象日活动总结
2015/02/27 职场文书