<font id="xpvbd"></font><delect id="xpvbd"><video id="xpvbd"><listing id="xpvbd"></listing></video></delect>

<p id="xpvbd"><output id="xpvbd"></output></p>

<video id="xpvbd"></video>

<output id="xpvbd"></output>
<video id="xpvbd"><output id="xpvbd"><delect id="xpvbd"></delect></output></video>

<noframes id="xpvbd"><video id="xpvbd"></video>
<video id="xpvbd"><output id="xpvbd"></output></video>
<output id="xpvbd"><output id="xpvbd"></output></output>
<p id="xpvbd"></p>

<video id="xpvbd"><output id="xpvbd"><delect id="xpvbd"></delect></output></video>

<p id="xpvbd"></p><p id="xpvbd"></p>

<p id="xpvbd"></p>
<video id="xpvbd"><output id="xpvbd"><delect id="xpvbd"></delect></output></video><video id="xpvbd"><output id="xpvbd"><font id="xpvbd"></font></output></video>

<p id="xpvbd"></p>

<p id="xpvbd"></p>

<video id="xpvbd"><p id="xpvbd"></p></video><p id="xpvbd"></p>
<noframes id="xpvbd">
<p id="xpvbd"><delect id="xpvbd"></delect></p>

<p id="xpvbd"></p>

<video id="xpvbd"><p id="xpvbd"><delect id="xpvbd"></delect></p></video><video id="xpvbd"><delect id="xpvbd"><font id="xpvbd"></font></delect></video><video id="xpvbd"><delect id="xpvbd"></delect></video>

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

基于OpenCV的條形碼檢測

發布時間:2021-05-27 15:02:29


基于OpenCV的條形碼檢測


在日常生活中,經常會看到條形碼的應用,比如超市買東西的生活,圖書館借書的時候... ...

那么這些東西是如何做到準確檢測出條形碼的位置呢?

這就是今天要介紹的內容了。

這篇文章的目標是演示使用計算機視覺和圖像處理技術實現條形碼的檢測。

通過本篇文章的學習,我們能學到的內容包括:

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

2、更重要的一點,希望通過這個案例,能夠幫助大家建立分析問題和處理問題的思路

需要注意的是,這個算法并不適用于所有的條形碼,但是它應該能給你一個基本的直覺,告訴你應該應用什么類型的技術。

對于下面這個例子,我們將檢測下圖中的條形碼:

1

目標:

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


2

思路:

利用條形碼的自身特點,一般都是矩形形狀,而且條碼的條帶是黑色的,矩形區域是白色的。

首先,需要搭建好需要的開發環境,Opencv,Qt5.9或Vs2017。

接下來寫代碼:

首先將需要的頭文件添加到項目中,并將要識別的圖片路徑添加進來。


接下來進行實際的圖像處理:

首先我們先讀入圖片并將其轉換為灰度圖;

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

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

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

請注意梯度操作是如何檢測出圖片的條形碼區域的。接下來的步驟是如何過濾掉圖片中的噪聲,重點關注條形碼區域。

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

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

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

然而,正如你所看到的上圖閾值化圖片,在條形碼的垂直方向上存在這間隙。為了縮小這些間隙,并使得我們的算法更加容易的檢測出條形碼的“斑點”狀區域,我們需要執行一些基礎的形態學操作:

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

當然,現在圖片中非條形碼的區域存在著很多斑點,這將會干擾輪廓的檢測。

現在,我們繼續嘗試移除這些小的斑點。


我們現在要做的是進行6次腐蝕操作,然后再進行6次膨脹操作。腐蝕操作將會“腐蝕”掉圖片中的白色像素點,因此將會清除這些小的斑點,而膨脹操作將會“擴張”剩余的白色像素,并使白色區域變長。

如果在腐蝕過程中去除了小的斑點,則在膨脹的過程中不會再次出現。

在一系列的腐蝕和膨脹操作之后,這些小斑點已經被成功的移除了,只剩下條形碼的區域。

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

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

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

正如我們下圖所示,我們已經成功的檢測到條形碼

這樣,條形碼的檢測就已經完成了!

想了解更多嵌入式知識就來西安盛圖科技!

西安盛圖科技
高端IT培訓第一品牌





上一篇:Android 界面布局-LinearLayout
下一篇:什么是去中心化
在线看片国产日韩欧美亚洲
<font id="xpvbd"></font><delect id="xpvbd"><video id="xpvbd"><listing id="xpvbd"></listing></video></delect>

<p id="xpvbd"><output id="xpvbd"></output></p>

<video id="xpvbd"></video>

<output id="xpvbd"></output>
<video id="xpvbd"><output id="xpvbd"><delect id="xpvbd"></delect></output></video>

<noframes id="xpvbd"><video id="xpvbd"></video>
<video id="xpvbd"><output id="xpvbd"></output></video>
<output id="xpvbd"><output id="xpvbd"></output></output>
<p id="xpvbd"></p>

<video id="xpvbd"><output id="xpvbd"><delect id="xpvbd"></delect></output></video>

<p id="xpvbd"></p><p id="xpvbd"></p>

<p id="xpvbd"></p>
<video id="xpvbd"><output id="xpvbd"><delect id="xpvbd"></delect></output></video><video id="xpvbd"><output id="xpvbd"><font id="xpvbd"></font></output></video>

<p id="xpvbd"></p>

<p id="xpvbd"></p>

<video id="xpvbd"><p id="xpvbd"></p></video><p id="xpvbd"></p>
<noframes id="xpvbd">
<p id="xpvbd"><delect id="xpvbd"></delect></p>

<p id="xpvbd"></p>

<video id="xpvbd"><p id="xpvbd"><delect id="xpvbd"></delect></p></video><video id="xpvbd"><delect id="xpvbd"><font id="xpvbd"></font></delect></video><video id="xpvbd"><delect id="xpvbd"></delect></video>