在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中使用装饰器和元编程实现结构体类实例
Jan 28 Python
Python3实现从指定路径查找文件的方法
May 22 Python
初学python的操作难点总结(新手必看篇)
Aug 03 Python
用Eclipse写python程序
Feb 10 Python
python+ffmpeg视频并发直播压力测试
Mar 06 Python
Python实现的IP端口扫描工具类示例
Feb 15 Python
Python Numpy库datetime类型的处理详解
Jul 13 Python
Django 对IP访问频率进行限制的例子
Aug 30 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
python实现ftp文件传输系统(案例分析)
Mar 20 Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 Python
Matplotlib绘制条形图的方法你知道吗
Mar 21 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
安装APACHE
2007/01/15 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
jquery网页元素拖拽插件效果及实现
2013/08/05 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
在layui中layer弹出层点击事件无效的解决方法
2019/09/05 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
python实现机器人行走效果
2018/01/29 Python
解决Python一行输出不显示的问题
2018/12/03 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
美国的Eastbay旗下的运动款子品牌:Final-Score
2018/01/01 全球购物
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
C语言面试题
2013/05/19 面试题
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
军训感想500字
2014/02/20 职场文书
国际贸易毕业生求职信范文
2014/02/21 职场文书
周恩来的四个昼夜观后感
2015/06/03 职场文书
生日赠语
2015/06/23 职场文书
导游词之西安骊山
2019/12/20 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript