我想使用python OpenCV查找並分離邊緣檢測圖像中的所有邊緣。邊緣可以是輪廓形式,但不一定。我只想將所有連接的邊緣像素分組在一起。因此從技術上講該算法可程序化聽起來是這樣的:使用OpenCV查找連接的組件
- 對於每個邊緣像素,找到相鄰(連接)邊緣像素,並將其添加到圖像的當前細分,直到你無法找到一個了。
- 然後移動到下一個未檢查的邊緣像素並開始一個新的細分,並再次執行1)。
我查看了cv.findContours
,但結果並不令人滿意,可能是因爲它是用於輪廓(封閉邊緣)而不是自由端點。下面是結果:
原邊檢測:
我預計五個棱將分別被分成了自己的細分:
輪廓加工後圖像,但顯然cv2.findContours函數將邊緣2分割成更多細分,我不想要這些細分。
這裏是我用來保存這些2個圖像的代碼:
def contourForming(imgData):
cv2.imshow('Edge', imgData)
cv2.imwrite('EdgeOriginal.png', imgData)
contours = cv2.findContours(imgData, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.imshow('Contours', imgData)
cv2.imwrite('AfterFindContour.png', imgData)
cv2.waitKey(0)
pass
有限制我的實現,但是。我必須使用Python 2.7和OpenCV2。除此之外,我無法使用任何其他修訂或語言。我這樣說是因爲我知道OpenCV 2有一個使用C++的connectedComponent函數。我本可以使用,但問題是,由於某些限制,我無法使用它。
那麼,任何想法我應該如何處理這個問題?
你可以嘗試cv ::輪廓提取之前擴大邊緣,但可能會改變結果 – Micka