在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使用Flask框架同时上传多个文件的方法
Mar 21 Python
Python内置函数dir详解
Apr 14 Python
Python做文本按行去重的实现方法
Oct 19 Python
Python 确定多项式拟合/回归的阶数实例
Dec 29 Python
Python多图片合并PDF的方法
Jan 03 Python
python腾讯语音合成实现过程解析
Aug 01 Python
在Django下测试与调试REST API的方法详解
Aug 29 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
Apr 22 Python
学会迭代器设计模式,帮你大幅提升python性能
Jan 03 Python
python中常用的数据结构介绍
Jan 12 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
Apr 20 Python
Python实现Matplotlib,Seaborn动态数据图
May 06 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写的MySQL数据库用户认证系统代码
2007/03/22 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
PHP函数strip_tags的一个bug浅析
2014/05/22 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
初识javascript 文档碎片
2010/07/13 Javascript
利用js实现选项卡的特别效果的实例
2013/03/03 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
JQuery操作单选按钮以及复选按钮示例
2013/09/23 Javascript
判断javascript的数据类型(示例代码)
2013/12/11 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
python yield和Generator函数用法详解
2020/02/10 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
python如何写个俄罗斯方块
2020/11/06 Python
python unichr函数知识点总结
2020/12/16 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
Joules美国官网:出色的英国风格
2017/10/30 全球购物
某科技软件测试面试题
2013/05/19 面试题
计划生育宣传标语
2014/06/21 职场文书
咖啡店创业计划书
2014/08/15 职场文书
2014年财政工作总结
2014/12/10 职场文书
小学优秀教师先进事迹材料
2014/12/16 职场文书
女方离婚起诉书
2015/05/18 职场文书
公司档案管理制度
2015/08/05 职场文书
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis