0

我試圖繪製我的測試圖像周圍的輪廓。我在後臺使用Canny邊緣檢測。Python drawContours方法在應用的圖像上沒有任何東西(OpenCV)

findContours方法適用於我的圖像,但是當我嘗試對該圖像執行drawContours方法時。它沒有顯示任何東西。

這是我曾嘗試

import cv2 
import numpy as np 

image = cv2.imread('/path/to/image.jpg') 

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
blurred = cv2.GaussianBlur(gray, (11, 11), 0) 
cv2.imshow("blurred", blurred) 

canny = cv2.Canny(blurred, 30, 150) 

(_, cnts, _) = cv2.findContours(canny.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 

print "Contours in the image, %d" % (len(cnts)) 

shape = image.copy() 
cv2.drawContours(shape.copy(), cnts, -1, (0, 255, 0), 2) 
cv2.imshow("Edges", shape) 

從我從文檔收集,第四個參數的方法drawContours將用於指定邊緣的顏色繪製了過來。但它沒有顯示任何東西,而不是我期待的綠色邊緣。

len(cnts)回報2,我

這裏是圖像我想它與

Here is the image that I trying it out with

我使用OpenCV的版本3.0.0

相關SO question

編輯:改後將cv2.findContours()的第三個參數設置爲cv2.CHAIN_APPROX_NONE,但它仍未在最終的cv2.imshow("Edges", shape)圖像上顯示最終的綠色邊緣(或針對該問題的任何顏色)。以下是我從精明的邊緣圖像獲得

enter image description here

+0

試着用'cv2.CHAIN_APPROX_NONE' – ZdaR

+0

@ZdaR請編輯的問題 –

回答

0

你需要修改的最後一個對你的代碼行:

您已經存儲的image副本中shape

shape = image.copy() 

那麼爲什麼你再次使用shape.copy()cv2.drawContours()

替換它,如下所示:

cv2.drawContours(shape, cnts, -1, (0, 255, 0), 2) 
cv2.imshow("Edges", shape) 

注:您已經複製一次的圖像,所以用它來繪製輪廓。您不必使用複製圖像的複製版本。

這就是你得到的結果:

enter image description here

相關問題