在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 相关文章推荐
haskell实现多线程服务器实例代码
Nov 26 Python
使用python实现正则匹配检索远端FTP目录下的文件
Mar 25 Python
Python bsddb模块操作Berkeley DB数据库介绍
Apr 08 Python
python实现在windows服务中新建进程的方法
Jun 30 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
Dec 17 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
python scrapy爬虫代码及填坑
Aug 12 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
Python正则表达式如何匹配中文
May 27 Python
python获取整个网页源码的方法
Aug 03 Python
Python scrapy爬取起点中文网小说榜单
Jun 13 Python
python和anaconda的区别
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之sphinx
2013/05/15 PHP
一个好用的PHP验证码类实例分享
2013/12/27 PHP
PHP静态成员变量
2017/02/14 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
PHP获取二叉树镜像的方法
2018/01/17 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
vue-cli之router基本使用方法详解
2017/10/17 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
layui 实现加载动画以及非真实加载进度的方法
2019/09/23 Javascript
Python创建xml文件示例
2017/03/22 Python
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
好矿嫂事迹材料
2014/01/21 职场文书
省三好学生申请材料
2014/01/22 职场文书
机电专业大学生职业规划书范文
2014/02/25 职场文书
大学自主招生推荐信
2014/05/10 职场文书
给客户的检讨书
2014/12/21 职场文书
硕士毕业答辩开场白
2015/05/27 职场文书
2016年寒假政治学习心得体会
2015/10/09 职场文书
python实现高效的遗传算法
2021/04/07 Python
Python中字符串对象语法分享
2022/02/24 Python