毕业论文
您现在的位置: 条形码 >> 条形码前景 >> 正文 >> 正文

代码实战基于OpenCV的条形码检测

来源:条形码 时间:2022/5/13

点击上方“计算机视觉life”,选择“星标”

快速获得最新干货

概述

在日常生活中,经常会看到条形码的应用,比如超市买东西的生活,图书馆借书的时候。。。

那么这些东西是如何做到准确检测出条形码的位置呢?

这就是今天要介绍的内容了

这篇博文的目标是演示使用计算机视觉和图像处理技术实现条形码的检测。

通过本篇文章的学习,我们能学到的内容包括:

1、图像处理中常用的一些操作流程,包括滤波、阈值化处理、膨胀、腐蚀和轮廓查找等

2、更重要的一点,希望通过这个案例,能够帮助大家建立分析问题和处理问题的思路

需要注意的是,这个算法并不适用于所有的条形码,但是它应该能给你一个基本的直觉,告诉你应该应用什么类型的技术。

条形码的检测

对于下面这个例子,我们将检测下图中的条形码:

目标:找到条形码的位置,而去除掉干扰的因素

思路:

利用条形码的自身特点,一般都是矩形形状,而且条码的条带是黑色的,矩形区域是白色的

让我们继续写一些代码。打开一个新文件,将其命名为detect_barcode.py,如何开始写代码:

# 导入必要的包/库importnumpyasnpimportargparseimportimutilsimportcv2#构造参数解析并分析参数ap=argparse.ArgumentParser()ap.add_argument("-i","--image",quid=True,help="pathtotheimagefile")args=vars(ap.parse_args())

我们首先要做的是导入我们需要的包。我们将使用numpy进行数字处理,argparse用于解析命令行参数,cv2进行opencv绑定。

然后我们将设置命令行参数。我们这里只需要一个开关,即--image,它是我们图像的路径,其中包含我们想要检测的条形码。

现在,让我进行实际的图像处理吧 导入图片并转化为灰度图

image=cv2.imad(args["image"])gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)#计算图片x和y方向的Scharr梯度大小ddepth=cv2.cv.CV_32Fifimutils.is_cv2()elsecv2.CV_32FgradX=cv2.Sobel(gray,ddepth=ddepth,dx=1,dy=0,ksize=-1)gradY=cv2.Sobel(gray,ddepth=ddepth,dx=0,dy=1,ksize=-1)#用x方向的梯度减去y方向的梯度gradient=cv2.subtract(gradX,gradY)gradient=cv2.convertScaleAbs(gradient)

首先我们先读入图片并将其转换为灰度图;

然后我们使用Scharr操作符(这里制定ksize=1)去构造图片在水平和垂直方向上的梯度幅值表示。

这里,我们用Scharr算子的x方向梯度减去y方向的梯度。通过这个相减操作,我们就只剩下了高水平梯度和低垂直梯度的图像区域。

我们上述原始图像的梯度表示如下图所示

请注意梯度操作是如何检测出图片的条形码区域的。接下来的步骤是如何过滤掉图片中的噪声,重点

转载请注明:http://www.0431gb208.com/sjsbszl/253.html