您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++怎么用OpenCV獲取圖片中物品的數量”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++怎么用OpenCV獲取圖片中物品的數量”吧!
實現效果
我們看到上面這張圖片,運用我們學到的OpenCV技術計算出這張圖片里面一共有多少顆棗。
實現思路
二值化圖像分割
形態學操作(腐蝕+膨脹)
距離變換
連通區域計算
尋找輪廓并計算個數
代碼演示
我們再新建一個項目名為opencv--count,按照配置屬性(VS2017配置OpenCV通用屬性),然后在源文件寫入#include和main方法.
首先加載了圖片顯示出來
二值化圖像分割
首先將圖片大小調整一下,方便我們顯示觀看
然后對圖像進行高斯模糊,并轉為灰度圖
再對圖像進行二值化操作
我們這里運行一下看看顯示效果
上圖可以看到右邊的圖片我們已經進行過二值化處理后的顯示效果了
形態學操作
接下來我們要進行形態學的操作,首先看到上面右圖,我們的每個棗的里面會有白色的點,是光打上后我們二值化變為的白色,所以我們這里要先進行一下腐蝕操作,把棗里面的白點去掉。
運行起來看
可以看到右圖中的白點已經全部處理掉了
接下來我們再進行膨脹的操作,用于把黑色區域進行分割,這里的膨脹操作可以連續做幾次,盡量把黑色區域縮小,我的參數里面我做了5次膨脹
再看一下效果
左圖是經常五次膨脹后把黑色區域都分割的效果
距離變換
首先將我們的二值化圖像黑白反轉過來
然后開始距離的變換
接下來再進行歸一化處理并顯示出來
顯示的效果為
連通區域計算
首先我們先建一個8u的圖并轉換過來
然后我們根據上面圖里面白點進行局部閾值二值化處理
顯示效果為
可以看到右邊基本把白色的連接區域都分割開了,只不過各別地方也有一點白點
然后我們再通過形態學膨脹兩次進行處理
把一點白點斷開的區域通過膨脹再連接到一起
尋找并計算輪廓
根據上面的圖我們在那個基礎上尋找輪廓,參數用的CV_RETR_EXTERNAL,這里我們只找最外側輪廓即可。
根據找到的輪廓畫出新圖并輸出結果,在drawContours里面倒數第二個參數用的-1,這里是代表輪廓畫出來后直接填充滿了。
運行效果
再看一下輸出的值:
回到我們的源圖片一下,確實就是12個棗
感謝各位的閱讀,以上就是“C++怎么用OpenCV獲取圖片中物品的數量”的內容了,經過本文的學習后,相信大家對C++怎么用OpenCV獲取圖片中物品的數量這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。