在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计算牛顿迭代多项式实例分析
May 07 Python
python获取多线程及子线程的返回值
Nov 15 Python
分析python请求数据
Aug 19 Python
python提取具有某种特定字符串的行数据方法
Dec 11 Python
python3.x提取中文的正则表达式示例代码
Jul 23 Python
在PyCharm中实现添加快捷模块
Feb 12 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
django models里数据表插入数据id自增操作
Jul 15 Python
使用PyCharm官方中文语言包汉化PyCharm
Nov 18 Python
聊聊python在linux下与windows下导入模块的区别说明
Mar 03 Python
Python 把两层列表展开平铺成一层(5种实现方式)
Apr 07 Python
Pillow图像处理库安装及使用
Apr 12 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
java解析json方法总结
2019/05/16 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
取得传值的函数
2006/10/27 Javascript
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
input按钮的事件处理大全
2010/12/10 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
JavaScript几种数组去掉重复值的方法推荐
2016/04/12 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
JS获取月的第几周和年的第几周实例代码
2018/12/05 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
vue 组件间的通信之子组件向父组件传值的方式
2020/07/29 Javascript
python使用多线程不断刷新网页的方法
2015/03/31 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
.net笔试题
2014/03/03 面试题
机械制造专业个人的自我评价
2013/12/28 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
个人投资计划书
2014/05/01 职场文书
女生节标语
2014/06/26 职场文书
英语三分钟演讲稿
2014/08/19 职场文书
2014年教育工作总结
2014/11/26 职场文书
不同意离婚上诉状
2015/05/23 职场文书
Python中Selenium对Cookie的操作方法
2021/07/09 Python
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js
Python 匹配文本并在其上一行追加文本
2022/05/11 Python