2017-03-27 36 views
2

我想檢測二進制圖像中是否存在連續或封閉的多邊形。圖像可能包含可變數目邊的多邊形,也可能根本沒有多邊形。如何檢測二進制圖像中的多邊形

這是肯定的情況下:

enter image description here

而且,

這一項是負的情況下:

enter image description here

是否有圖像的任何方法親cessing或一些算法來檢測連續的多邊形?

任何形式的幫助表示讚賞。

+0

它是否必須凸出? – sop

+0

既凹或凸 –

回答

1

如果你需要同時檢測凹和凸多邊形,然後我可以建議你另一種方式來做到這一點,一個人已經由@mdh

  1. 首先告訴,你需要找到輪廓(cv2.findContours
  2. 然後計算輪廓(cv2.contourArea
  3. 的面積計算黑色區域的區域中的二值圖像中(計算的二值圖像中的黑像素的數量,OpenCV的一個countNonZero功能,即它會爲你)
  4. 比較兩個值,如果它們接近(例如,他們的比例接近1或大於一個值,你應該通過測試更多的圖像來選擇它),那麼你發現的輪廓是封閉的,所以它可能是一個多邊形

當然可能有一些自相交多邊形中的誤差和/或圖像中是否存在多個輪廓,但這可以通過分段拾取輪廓的邊界框並在每一個上應用算法來修復。

1

我有一個工具來檢測圖像中的區域和屬於該區域的一些屬性。 https://github.com/mribrahim/Blob-Detection

認爲,如果它是一個多邊形,它將是一個封閉區域(正例)。

如果它沒有關閉,它將成爲一行(負面情況)。

您可以使用blob檢測工具找到區域屬性,我提到過。你可以使用一些屬性,如偏心率,可靠性來區分正面和負面的情況。

例如;負面情況eccentiricity將被關閉到0,因爲它是一條線

2

我希望你知道如何找到輪廓。

使用cv2.isContourConvex(contour)您可以識別檢測到的輪廓是否凸起。通過凸面,我的意思是凸面是否閉合。您將能夠使用此功能分離封閉輪廓和開放輪廓,該功能返回布爾值TrueFalse

分離出輪廓之後,繼續進行進一步分析,確定輪廓是否有邊緣。

+0

我不需要凹或凸,但只是多邊形的存在。我知道如何找到輪廓還有一些其他功能在opencv找到封閉與否。你能解釋一下嗎 –

+0

你已經說過*'在opencv中有一些其他函數來查找是否關閉'* ...這個函數是什麼?我想知道....:D –

+0

嘿,對不起。這實際上是我的問題 –