opencv函数findcontours_OpenCV系列之轮廓入门 | 二十一
生活随笔
收集整理的這篇文章主要介紹了
opencv函数findcontours_OpenCV系列之轮廓入门 | 二十一
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目標
- 了解輪廓是什么。
- 學習查找輪廓,繪制輪廓等。
- 你將看到以下功能:cv.findContours(),cv.drawContours()
什么是輪廓?
輪廓可以簡單地解釋為連接具有相同顏色或強度的所有連續點(沿邊界)的曲線。輪廓是用于形狀分析以及對象檢測和識別的有用工具。- 為了獲得更高的準確性,請使用二進制圖像。因此,在找到輪廓之前,請應用閾值或canny邊緣檢測。
- 從OpenCV 3.2開始,findContours()不再修改源圖像。
- 在OpenCV中,找到輪廓就像從黑色背景中找到白色物體。因此請記住,要找到的對象應該是白色,背景應該是黑色。
如何繪制輪廓?
要繪制輪廓,請使用cv.drawContours函數。只要有邊界點,它也可以用來繪制任何形狀。它的第一個參數是源圖像,第二個參數是應該作為Python列表傳遞的輪廓,第三個參數是輪廓的索引(在繪制單個輪廓時有用。要繪制所有輪廓,請傳遞-1),其余參數是顏色,厚度等等
在圖像中繪制所有輪廓:
cv.drawContours(img,?contours,?-1,?(0,255,0),?3)
繪制單個輪廓,如第四個輪廓:
cv.drawContours(img,?contours,?3,?(0,255,0),?3)?
但是在大多數情況下,以下方法會很有用:
cnt?=?contours[4]cv.drawContours(img,?[cnt],?0,?(0,255,0),?3)
注意最后兩種方法相似,但是前進時,您會發現最后一種更有用。
輪廓近似方法
這是cv.findContours函數中的第三個參數。它實際上表示什么?上面我們告訴我們輪廓是強度相同的形狀的邊界。它存儲形狀邊界的(x,y)坐標。但是它存儲所有坐標嗎?這是通過這種輪廓近似方法指定的。如果傳遞cv.CHAIN_APPROX_NONE,則將存儲所有邊界點。但是實際上我們需要所有這些要點嗎?例如,您找到了一條直線的輪廓。您是否需要線上的所有點來代表該線?不,我們只需要該線的兩個端點即可。這就是cv.CHAIN_APPROX_SIMPLE所做的。它刪除所有冗余點并壓縮輪廓,從而節省內存。下面的矩形圖像演示了此技術。只需在輪廓數組中的所有坐標上繪制一個圓(以藍色繪制)。第一幅圖像顯示了我用cv.CHAIN_APPROX_NONE獲得的積分(734個點),第二幅圖像顯示了我用cv.CHAIN_APPROX_SIMPLE獲得的效果(只有4個點)。看,它可以節省多少內存!!!☆☆☆為方便大家查閱,小編已將OpenCV-Python專欄文章統一整理到公眾號底部菜單欄,同步更新中,關注公眾號,點擊左下方“文章”,如圖:
? ? ?不斷更新資源
? ?? 獲取更多精彩
長按二維碼掃碼關注
總結
以上是生活随笔為你收集整理的opencv函数findcontours_OpenCV系列之轮廓入门 | 二十一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 余承东:华为一直引领折叠机市场的发展 新
- 下一篇: centos7从有线切换到无线_如何简单