在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 socket 超时设置 errno 10054
Jul 01 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
Sep 15 Python
python的pdb调试命令的命令整理及实例
Jul 12 Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 Python
Python基于回溯法子集树模板解决取物搭配问题实例
Sep 02 Python
Python中协程用法代码详解
Feb 10 Python
解读python logging模块的使用方法
Apr 17 Python
详解python中eval函数的作用
Oct 22 Python
Python上下文管理器用法及实例解析
Nov 11 Python
Python爬虫爬取杭州24时温度并展示操作示例
Mar 27 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
Apr 02 Python
用python发送微信消息
Dec 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
yii2实现根据时间搜索的方法
2016/05/25 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
picChange 图片切换特效的函数代码
2010/05/06 Javascript
jQuery中add实现同时选择两个id对象
2010/10/22 Javascript
Jquery 插件开发笔记整理
2011/01/17 Javascript
js实时监听文本框状态的方法
2011/04/26 Javascript
jquery 选项卡效果 新手代码
2011/07/08 Javascript
jquery()函数的三种语法介绍
2013/10/09 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
python中abs&map&reduce简介
2018/02/20 Python
遗传算法python版
2018/03/19 Python
基于python绘制科赫雪花
2018/06/22 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
详解numpy.meshgrid()方法使用
2019/08/01 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
Python celery原理及运行流程解析
2020/06/13 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
交通安全演讲稿
2014/01/07 职场文书
网站推广策划方案
2014/06/04 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技