在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网络编程步骤详解(socket套接字使用)
Dec 06 Python
python使用threading获取线程函数返回值的实现方法
Nov 15 Python
Django中更改默认数据库为mysql的方法示例
Dec 05 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
Opencv实现抠图背景图替换功能
May 21 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
Jun 04 Python
python字典的常用方法总结
Jul 31 Python
Python测试线程应用程序过程解析
Dec 31 Python
Python tkinter三种布局实例详解
Jan 06 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
Feb 07 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
Django Serializer HiddenField隐藏字段实例
Mar 31 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中用于检测一个地理IP地址是否可用的代码
2012/02/19 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
2013/06/28 PHP
php curl post 时出现的问题解决
2014/01/30 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
vue中配置mint-ui报css错误问题的解决方法
2017/10/11 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
详解JavaScript中的函数、对象
2019/04/01 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
列举Python中吸引人的一些特性
2015/04/09 Python
Python合并多个装饰器小技巧
2015/04/28 Python
python生成密码字典的方法
2018/07/06 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
python的help函数如何使用
2020/06/11 Python
Python实现手绘图效果实例分享
2020/07/22 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
python中selenium库的基本使用详解
2020/07/31 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
中国跨境电商:Tomtop
2017/03/16 全球购物
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
德国隐形眼镜店:LuckyLens
2018/07/29 全球购物
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
电子专业毕业生自我鉴定
2014/01/22 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js