基于Python的Opencv入門教程第二大部分(P2.識(shí)別物體)
書接上文(doge)
輪廓檢測(cè)并繪制

在上圖中,我們有6個(gè)形狀輪廓。讓我們通過(guò)代碼找到并繪制他們的輪廓:
在第34行和第35行,我們使用CV2。查找輪廓以檢測(cè)圖像中的輪廓。注意參數(shù)標(biāo)志,但現(xiàn)在讓我們保持簡(jiǎn)單——我們的算法是在閾值中查找所有前景(白色)像素。復(fù)制()圖像。
第36行非常重要,因?yàn)?a class='article-link' target='_blank' href='//www.bilibili.com/read/cv2?from=articleDetail'>CV2。findContours的實(shí)現(xiàn)在OpenCV 2.4、OpenCV 3和OpenCV 4之間進(jìn)行了更改。無(wú)論涉及到什么樣的輪廓,博客上都會(huì)出現(xiàn)這種兼容性。
我們?cè)诘?7行復(fù)制原始圖像,以便在隨后的第40-45行繪制輪廓。
我們使用CVC列表中的每一行CNT47來(lái)適當(dāng)?shù)乩L制cnts。畫輪廓。我選擇了紫色,它由元組(240,0,159)表示。
根據(jù)我們之前在這篇博文中了解到的內(nèi)容,讓我們?cè)趫D像上疊加一些文本:
第48行構(gòu)建一個(gè)文本字符串,其中包含形狀輪廓的數(shù)量。計(jì)算這張圖像中物體的總數(shù)就像檢查輪廓列表的長(zhǎng)度一樣簡(jiǎn)單。
結(jié)果如下圖所示:

侵蝕和擴(kuò)張
腐蝕和膨脹通常用于減少二值圖像中的噪聲(閾值化的副作用)。
為了減小前景對(duì)象的大小,我們可以通過(guò)多次迭代來(lái)削弱像素:
在第55行,我們復(fù)制thresh圖像,同時(shí)將其命名為mask。
然后,利用CV2。侵蝕,我們繼續(xù)通過(guò)5次迭代來(lái)減小輪廓尺寸(第56行)。
如下圖所示,由俄羅斯方塊輪廓生成的面具略小:

類似地,我們可以在遮罩中顯示前景區(qū)域。要擴(kuò)大區(qū)域,只需使用CV2.dilate:

掩蔽和按位操作
遮罩允許我們“遮掩”我們不感興趣的圖像區(qū)域。我們稱它們?yōu)椤罢谡帧?,因?yàn)樗鼈儠?huì)隱藏我們不關(guān)心的圖像區(qū)域。
如果我們使用文章中的第四張圖片的thresh圖像,并用原始圖像遮罩它,我們將看到下圖:

在上圖中,背景現(xiàn)在是黑色的,前景由彩色像素組成——任何被遮罩圖像遮住的像素。
讓我們學(xué)習(xí)如何做到這一點(diǎn):
通過(guò)復(fù)制二值閾值圖像生成掩模(第67行)。
從這里,我們使用CV2按位和兩幅圖像中的像素組合在一起。按位_和。
結(jié)果如上圖所示,我們現(xiàn)在只顯示/突出顯示俄羅斯方塊。
運(yùn)行第二個(gè)OpenCV教程Python腳本
上期簡(jiǎn)單的講了一下如何運(yùn)行這個(gè)程序,那么詳細(xì)教程來(lái)了!
(干嘛說(shuō)這么多廢話)
要運(yùn)行第二個(gè)腳本,請(qǐng)確保您位于包含下載的源代碼和Python腳本的文件夾中。從那里,我們將打開(kāi)一個(gè)終端,提供腳本名+命令行參數(shù):
參數(shù)標(biāo)志是--image,圖像參數(shù)本身是俄羅斯方塊。png-目錄中相關(guān)文件的路徑。
此腳本沒(méi)有終端輸出。同樣,要循環(huán)瀏覽圖像,請(qǐng)確保單擊圖像窗口使其處于活動(dòng)狀態(tài),從那里可以按一個(gè)鍵,它將被捕獲,以前進(jìn)到腳本中的下一個(gè)等待鍵(0)。當(dāng)程序完成運(yùn)行時(shí),腳本將優(yōu)雅地退出,并在終端中顯示一個(gè)新的bash提示行。
PS:當(dāng)然也可以使用上一期所講的方法,上文是原作者寫的,而上一期的是我這個(gè)87找老師后的解答,兩者都可以運(yùn)行

以下是廢話時(shí)間(bushi)
那么,關(guān)于基于Python的Opencv入門教程的第二大Part也結(jié)束了。(沒(méi)想到兩期就趕完了)
接來(lái)應(yīng)該會(huì)更新關(guān)于這個(gè)外國(guó)作者的其他文章。
還有,視頻短時(shí)間內(nèi)是更不了了QAQ