2017-09-05 220 views
0

我正在尋找輪廓的圖像,我成功地能夠識別下面圖像中幾乎所有的輪廓。但是我無法找到像左側兩個灰色框那樣的特定輪廓。我已經嘗試了所有輪廓方法,如樹,列表,外部,並嘗試與閾值。無法找到所有輪廓 - Opencv,python

請建議如果我失去了一些東西,也可以做些什麼來改善它

img = cv2.imread(input_image, 0) 

kernel = np.ones((5, 5),np.uint8) 
morphological_img = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) 

canny_img = cv2.Canny(morphological_img, 200, 300) 
input_imag, contours, hierarchy = 
cv2.findContours(canny_img,cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) # get contours 

https://i.stack.imgur.com/WomfA.png

+0

處理圖像的關鍵部分是處理,在你的情況下,你正在做的閾值,但如果閾值不足,你將永遠無法找到解決方案,我建議顯示圖像閾值。 – eyllanesc

+0

更好的方法是將圖像分割成幾部分。在檢測輪廓之前,圖像的左側部分可能需要不同類型的預處理。 – zindarod

+0

@eyllanesc我編輯了我的問題,請檢查。我正在使用內核和Morph漸變和canny而不是閾值來達到此目的 –

回答

0

你的問題不顯示或鏈接到的圖像,它指的是。但這裏有改善這一步驟:

  1. 除非你的形象已經是二進制的,標準的方法是首先應用閾值,然後利用形態學操作。

  2. 如果您只對輪廓感興趣,可以先執行Canny邊緣檢測,然後使用形態學操作來增強要檢測的輪廓。

  3. 如果canny_img未顯示與所需輪廓相對應的邊緣(嘗試cv2.imshow),則findContours需要使用很多,如果有的話。

如果您可以編輯答案以包含圖片,我們將能夠提供更具體的答案。

+0

我編輯了我的問題。請檢查.... –

+0

在這種情況下,我沒有看到任何需要做形態操作。如果你跳過它並直接在img上執行Canny,會發生什麼?您也可以使用cv2.HoughLines來檢測這些框周圍的直線。 – Totoro

+0

謝謝@Toroto會試試這個....我想給你+1,但這是告訴我,我需要+15名聲來做到這一點。 –