在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 判断一个进程是否存在
Apr 09 Python
python高手之路python处理excel文件(方法汇总)
Jan 07 Python
Linux 下 Python 实现按任意键退出的实现方法
Sep 25 Python
python实现简易版计算器
Jun 22 Python
Python selenium抓取微博内容的示例代码
May 17 Python
Python实现登陆文件验证方法
Oct 06 Python
python 实现UTC时间加减的方法
Dec 31 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
Python搭建代理IP池实现获取IP的方法
Oct 27 Python
使用python实现多维数据降维操作
Feb 24 Python
如何导出python安装的所有模块名称和版本号到文件中
Jun 05 Python
Django配置跨域并开发测试接口
Nov 04 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导出oracle库的php代码
2009/04/20 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
Laravel框架中集成MongoDB和使用详解
2019/10/17 PHP
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
简易的JS计算器实现代码
2016/10/18 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
基于JS实现网页中的选项卡(两种方法)
2017/06/16 Javascript
JS简单实现父子窗口传值功能示例【未使用iframe框架】
2017/09/20 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
zTree节点文字过多的处理方法
2017/11/24 Javascript
Vue单页应用引用单独的样式文件的两种方式
2018/03/30 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
Vue防止白屏添加首屏动画的实例
2019/10/31 Javascript
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
numpy中索引和切片详解
2017/12/15 Python
pytorch下使用LSTM神经网络写诗实例
2020/01/14 Python
python 调整图片亮度的示例
2020/12/03 Python
阿里健康官方海外旗舰店:阿里健康国际自营
2017/11/24 全球购物
俄罗斯小米家用电器、电子产品和智能家居商店:Poood.ru
2020/04/03 全球购物
白酒市场开发计划书
2014/01/09 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
小学新课改心得体会
2016/01/22 职场文书
python requests模块的使用示例
2021/04/07 Python
pandas中关于apply+lambda的应用
2022/02/28 Python
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫