python+OpenCV检测条形码

        今天看到一篇关于条形码检测的文章,还是存在一些问题的,昨天我陪朋友去取快递的时候,看到了关于条形码检测在现实场景中的应用,于是,便想着实现一波,并且对程序中的一些问题做了一些修改。

首先要确定调用的包/库的版本,这是在我电脑上程序的运行环境(在今后的文章中,我会特别注意版本问题,这个非常重要):

  • python3.6 + win 10
  • numpy 1.16.2
  • imutils 0.5.2
  • opencv 4.1.0
图片来源于百度

 

一、导入需要用到的包/库

import numpy as np
import imutils
import cv2

二、转化为灰度图

一般对图像的处理操作都是在灰度图的基础上进行的。

image = cv2.imread('D:\image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

 

三、使用Scharr算子进行边缘检测

        条形码一般具有以下特点:矩形形状,条带是黑色,背景为白色,而且黑白相间。这就导致条形码区域光暗变化明显,这对于Scharr算子非常合适,因为Scharr算子对于图像梯度的变化更加敏感,更有利于获取条形码的特征。

想要了解更多的边缘检测算法,可以查看我的这篇博客:https://blog.csdn.net/qq_40962368/article/details/81416954

ddepth = cv2.CV_32F if imutils.is_cv2() else cv2.CV_32F
gradX = cv2.Sobel(gray, ddepth=ddepth, dx=1, dy=0, ksize=-1)
gradY = cv2.Sobel(gray, ddepth=ddepth, dx=0, dy=1, ksize=-1)
gradient = cv2.subtract(gradX,gradY)
gradient = cv2.convertScaleAbs(gradient)

 

四、去除噪声

        (1)模糊与阈值化处理

            通过均值滤波对图像进行模糊处理,通过阈值化处理将图像转化为二值图像。以此来去除图像中的绝大部分噪声。cv2.threshold函数的第二个参数是为阈值化处理所设置的阈值,为了尽可能的去除噪声,所以,尽量将此值设置的大一些,但不能过大,以免影响条形码特征本身。

关于更多的OpenCV中阈值分割的方法,可以查看我的这篇博客:https://blog.csdn.net/qq_40962368/article/details/80917250

blurred = cv2.blur(gradient,(9, 9))
(_, thresh) = cv2.threshold(blurred, 231, 255, cv2.THRESH_BINARY)

 

         (2)形态学处理

            通过形态学处理,去除图像细小的噪声斑点。使用cv2.getStructuringElement函数定义结构元素,经过一个开运算,再经过四次腐蚀与四次膨胀,更好的去除噪声。

关于形态学的操作一些方法,可以查看我的这篇博客:https://blog.csdn.net/qq_40962368/article/details/81276820

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)

 

五、确定检测轮廓,画出检测框

        OpenCV中提供了识别图像区域的函数,非常好用,找相应的区域,根据区域大小进行排序,保留最大的区域,该区域就是我们要找的条形码区域。计算该轮廓的旋转边界框,确定位置信息,画出检测框。

cnts = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
c = sorted(cnts, key=cv2.contourArea, reverse=True)[0]rect = cv2.minAreaRect(c)
box = cv2.boxPoints(rect) if imutils.is_cv2() else cv2.boxPoints(rect)
box = np.int0(box)cv2.drawContours(image, [box], -1, (0, 255, 0), 3)
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

总结:从检测结果来看,在特定的应用场景下,检测效果还是挺好的,但不适合应用于所有的应用场景,但我们可以从条形码的检测过程可以看出解决这类问题的一般想法,为以后解决类似的问题提供一种比较可靠的思路。

 

参考网址:https://www.pyimagesearch.com/2014/11/24detecting-barcodes-images-python-opencv/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快搜浏览器_让微软丢大脸的edge浏览器终于出新版了!

九月份,基于 Chromium 内核的全新微软 Edge 浏览器开启 Beta 版本的测试,我看到使用全新内核的edge浏览器,以及官方加入的 IE 模式、隐私工具等一些更好用的新功能后,我暂时放下用了很长时间的老版本的edge浏览器,投入…

逻辑回归实现多分类任务(python+TensorFlow+mnist)

逻辑回归实现多分类任务(pythonTensorFlowmnist) 逻辑回归是统计学中的一种经典方法,虽然叫回归,但在机器学习领域,逻辑回归通常情况下当成一个分类任务,softmax就是由其演变而来,逻辑回归一般用…

物理哲学和生物哲学的对抗

来源:科学技术哲学相对论革命在上一讲中,我们提到第二次科学革命始于18世纪后期的化学革命,它的两大标志是:1. 近代西方科学的古典科学传统和培根科学传统融合,西方科学现代化;2. 科学和技术结合&#xff0…

cpu开核_新锐龙让AMD重返巅峰,但逆袭的50年里这些CPU也不应忘记

AMD从成立至今无疑有着许多神奇的经历,比如其创始人一开始只能艰难地筹集到5000美元创业,到如今AMD成为一家年营业额达到65亿美元的公司,这位创始人创始人杰里.桑德斯也赋予了AMD永不放弃,永不投降的精神。曾有过无比辉煌的历史&a…

二隐层的神经网络实现MNIST数据集分类

二隐层的神经网络实现MNIST数据集分类 传统的人工神经网络包含三部分,输入层、隐藏层和输出层。对于一个神经网络模型的确定需要考虑以下几个方面: 隐藏层的层数以及各层的神经元数量各层激活函数的选择输入层输入数据的shape输出层神经元的数量以上神经…

Android之SurfaceView

SurfaceView也是继承了View,但是我们并不需要去实现它的draw方法来绘制自己,为什么呢? 因为它和View有一个很大的区别,View在UI线程去更新自己;而SurfaceView则在一个子线程中去更新自己;这也显示出了它的…

日韩决裂,半导体谁最受伤?

来源: 半导体行业观察日本政府于7月1日公布,要加强对韩国的出口管理,7月4日发起了“氟化聚酰亚胺(Polymide)”、“EUV Resist(光阻剂)”、“氟化氢”三种半导体材料的出口限制。根据此次出口限制…

验证码随机生成

验证码随机生成 这里主要使用到的库是captcha库,下载的命令如下: pip install captcha 验证码随机生成代码,(python 版本:3.6 captcha 版本:0.3) from captcha.image import ImageCaptcha import numpy as np …

台式电脑麦克风_还有人买台式PC吗?这份新品推荐攻略值得收藏

【科技犬】新品一,联想发布新款天逸510S台式机联想现已推出天逸 510S 小型主机,搭载了英特尔最新的十代酷睿处理器 i5-10400,8GB 内存 512GB SSD 售价 3499 元。联想新款天逸 510S 将于 7 月 23 日开卖,适合企业办公用户使用。天…

天基物联,毫瓦服务,商业航天撬动万亿市场

来源: 卫星与网络2019年8月17日12时11分,酒泉卫星发射中心,北京国电高科科技有限公司(以下简称“国电高科”)研制的天启沧州号(又名“忻中一号”)卫星由首次发射的捷龙一号商业火箭成功送入太空…

GitHub如何上传超过100MB的文件

GitHub如何上传超过100MB的文件 平时在GitHub上上传项目文件时,遇到比较大的文件,就会出现无法上传的情况: this exceeds GitHubs file size limit of 100.00 MB 解决方法如下: 在所要上传文件的目录下打开Git 首先,…

人的智商到底有多高?

图片来源:verywell.com来源:生物谷人的智商到底有多高?来自慕尼黑大学的Markus Buhner教授表示,其实日常生活中我们认为的很多事实实际上或许都是误解,这里,研究人员对8种陈词滥调的有效性证据进行了权衡分…

解决问题:Couldn't open file: data/coco.names

错误:Couldn’t open file: data/coco.names darknet GitHub:https://github.com/pjreddie/darknet YOLO官网:https://pjreddie.com/darknet/yolo/ 在进行yolo效果测试时,出现了该错误。通过如下命令下载darknet: git…

linux系统下codeblocks控制台打印中文乱码

linux系统下codeblocks控制台打印中文乱码 在linux下安装codeblocks后&#xff0c;打印中文出现如下问题&#xff1a; #include <stdio.h> #include <stdlib.h>int main() {printf("你好&#xff0c;世界&#xff01;\n");return 0; } 解决办法 1、将…

db2时间格式化为时间到时分秒_快捷指令为 iPhone 手机照片添加时间水印

安卓手机用户&#xff0c;自带的相机一般都有花样繁多的水印功能&#xff0c;可以将当前使用的手机型号、日期时间、品牌等信息以水印形式添加到照片。而苹果手机自带的相机应用可设置的功能较少&#xff0c;不过&#xff0c;苹果系统自带的“快捷指令”应用扩展功能非常强&…

深度学习仍是视觉大数据领域的最好分析方法之一

在这个数据为王的时代&#xff0c;深度学习擅于发掘多维数据中错综复杂的关系。基于大数据的深度学习算法在计算机视觉、自然语言处理以及信息检索等多个领域不断刷新着记录。来源&#xff1a; AI科技评论AI 科技评论注&#xff1a;本文作者为中国科学院信息工程研究所张晓宇副…

matplotlib调节colorbar的大小

调节plt.colorbar的fraction系数即可调节colorbar的大小 weight np.random.random([8, 8]) plt.imshow(weight) plt.colorbar(fraction0.05, pad0.05) plt.savefig(tjn.png, bbox_inchestight) plt.show()

学习opencv 英文版_B站上适合程序员的学习资源【赶紧收藏!】

“二次元&#xff0c;鬼畜&#xff0c;动漫”是大家提到B站&#xff0c;最容易冒出来的关键词&#xff01;然而央视网一条微博却表示&#xff1a;过去一年有近2000万人在B站学习&#xff0c;相当于去年高考人数的2倍&#xff01;B站正在成为年轻人学习的首要阵地。下面整理一些…

Matlab读取json文件

Matlab读取json文件 在matlab中&#xff0c;可以将数据写入json文件&#xff0c;却没发现读取json的函数&#xff0c;网上查了一下&#xff0c;大部分是个人写的函数&#xff0c;再可执行性上可能会有一些问题。最终&#xff0c;还是发现了一个matlab解析json文件的工具包&…

追问人工智能

来源&#xff1a;人机与认知实验室前段时间&#xff0c;英国公司登记处的一份文件披露了 DeepMind 2018 年的财务状况&#xff1a;这家 AI 科技公司的净亏损由 2017 年的 3.41 亿美元增加至 2018 年的 5.72 亿美元&#xff0c;今年到期的债务高达 12.656 亿美元。如此巨额的亏损…