最新国产AV资源网_亚洲熟女AV天堂五月天_中文字幕丶东京热_中文字幕乱码免费高清视频

Hi,您好,歡迎來(lái)到西安盛圖軟件科技有限公司!

基于OpenCV的條形碼檢測(cè)

發(fā)布時(shí)間:2021-05-27 15:02:29


基于OpenCV的條形碼檢測(cè)


在日常生活中,經(jīng)常會(huì)看到條形碼的應(yīng)用,比如超市買(mǎi)東西的生活,圖書(shū)館借書(shū)的時(shí)候... ...

那么這些東西是如何做到準(zhǔn)確檢測(cè)出條形碼的位置呢?

這就是今天要介紹的內(nèi)容了。

這篇文章的目標(biāo)是演示使用計(jì)算機(jī)視覺(jué)和圖像處理技術(shù)實(shí)現(xiàn)條形碼的檢測(cè)。

通過(guò)本篇文章的學(xué)習(xí),我們能學(xué)到的內(nèi)容包括:

1、圖像處理中常用的一些操作流程,包括濾波、閾值化處理、膨脹、腐蝕和輪廓查找等

2、更重要的一點(diǎn),希望通過(guò)這個(gè)案例,能夠幫助大家建立分析問(wèn)題和處理問(wèn)題的思路

需要注意的是,這個(gè)算法并不適用于所有的條形碼,但是它應(yīng)該能給你一個(gè)基本的直覺(jué),告訴你應(yīng)該應(yīng)用什么類(lèi)型的技術(shù)。

對(duì)于下面這個(gè)例子,我們將檢測(cè)下圖中的條形碼:

1

目標(biāo):

找到條形碼的位置,而去除掉干擾的因素。


2

思路:

利用條形碼的自身特點(diǎn),一般都是矩形形狀,而且條碼的條帶是黑色的,矩形區(qū)域是白色的。

首先,需要搭建好需要的開(kāi)發(fā)環(huán)境,Opencv,Qt5.9或Vs2017。

接下來(lái)寫(xiě)代碼:

首先將需要的頭文件添加到項(xiàng)目中,并將要識(shí)別的圖片路徑添加進(jìn)來(lái)。


接下來(lái)進(jìn)行實(shí)際的圖像處理:

首先我們先讀入圖片并將其轉(zhuǎn)換為灰度圖;

然后我們使用Scharr操作符去構(gòu)造圖片在水平和垂直方向上的梯度幅值表示。

這里,我們用Scharr算子的x方向梯度減去y方向的梯度。通過(guò)這個(gè)相減操作,我們就只剩下了高水平梯度和低垂直梯度的圖像區(qū)域。

我們上述原始圖像的梯度表示如下圖所示

請(qǐng)注意梯度操作是如何檢測(cè)出圖片的條形碼區(qū)域的。接下來(lái)的步驟是如何過(guò)濾掉圖片中的噪聲,重點(diǎn)關(guān)注條形碼區(qū)域。

我們做的第一件事是使用一個(gè)卷積核大小為9x9的均值濾波作用于梯度圖片。對(duì)圖片進(jìn)行這個(gè)操作將有助于平滑圖片中的高頻噪聲。

然后我將模糊化后的圖片進(jìn)行閾值化,在梯度圖片中,所有的像素點(diǎn)的灰度值低于120的將設(shè)為0(黑色),其余設(shè)為255(白色)。

模糊和閾值化處理后的輸出結(jié)果如下:

然而,正如你所看到的上圖閾值化圖片,在條形碼的垂直方向上存在這間隙。為了縮小這些間隙,并使得我們的算法更加容易的檢測(cè)出條形碼的“斑點(diǎn)”狀區(qū)域,我們需要執(zhí)行一些基礎(chǔ)的形態(tài)學(xué)操作:

我們通過(guò)使用函數(shù)cv2.getStructuringElement構(gòu)造一個(gè)矩形核。這個(gè)核的寬度大于高度,因此允許我們縮小條形碼垂直條帶之間的間隙。

當(dāng)然,現(xiàn)在圖片中非條形碼的區(qū)域存在著很多斑點(diǎn),這將會(huì)干擾輪廓的檢測(cè)。

現(xiàn)在,我們繼續(xù)嘗試移除這些小的斑點(diǎn)。


我們現(xiàn)在要做的是進(jìn)行6次腐蝕操作,然后再進(jìn)行6次膨脹操作。腐蝕操作將會(huì)“腐蝕”掉圖片中的白色像素點(diǎn),因此將會(huì)清除這些小的斑點(diǎn),而膨脹操作將會(huì)“擴(kuò)張”剩余的白色像素,并使白色區(qū)域變長(zhǎng)。

如果在腐蝕過(guò)程中去除了小的斑點(diǎn),則在膨脹的過(guò)程中不會(huì)再次出現(xiàn)。

在一系列的腐蝕和膨脹操作之后,這些小斑點(diǎn)已經(jīng)被成功的移除了,只剩下條形碼的區(qū)域。

最后尋找一下圖片中條形碼的區(qū)域的輪廓。

幸運(yùn)的是,OpenCV中提供了相應(yīng)的接口,可以很容易地找到圖像中的最大輪廓,如果我們正確地完成了圖像處理步驟,它應(yīng)該會(huì)對(duì)應(yīng)于條形碼區(qū)域。

然后,我們確定最大輪廓的最小的邊界框,并最后顯示檢測(cè)到的條形碼。

正如我們下圖所示,我們已經(jīng)成功的檢測(cè)到條形碼

這樣,條形碼的檢測(cè)就已經(jīng)完成了!

想了解更多嵌入式知識(shí)就來(lái)西安盛圖科技!

西安盛圖科技
高端IT培訓(xùn)第一品牌





上一篇:Android 界面布局-LinearLayout
下一篇:什么是去中心化

歡迎登錄盛圖科技

歡迎注冊(cè)盛圖科技

已有賬號(hào),立即登錄