2016-04-07 79 views
1

我想使用cv2.pointPolygonTest來檢查點是否放置在輪廓內部或外部,但我無法弄清楚它爲什麼不起作用。如何正確使用cv2.pointPolyginTest()和cv2.findcontours()?

這是我得到的輪廓的方式:

img_name = a295121c-f893-43f5-8d00-6bfddbc19658.jpg" 
im = cv2.imread(img_name) 
im_gray = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY) 

ret, thresh = cv2.threshold(im_gray, 10, 255, cv2.THRESH_BINARY) 
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_TC89_L1) 

而且我這是怎麼檢查點是內部或外部檢測對象。

x1 = cv2.pointPolygonTest(contours[0], (x, y), False) 

在此tresholded圖像正常工作:

test1

X1正確計算時(x,y)裏面對象

np.shape(contours)等於(1, 241, 1, 2)

但是這個形象:

enter image description here

所有點都爲外界

np.shape(contours)計算等於(11,)

我想我沒有以適當的方式使用的輪廓,但我想不通的輪廓,其尺寸應我傳遞給cv2.pointPolygonTest()

+0

在黑色初始化二進制掩碼('drawContours')上繪製白色填充輪廓通常更容易,然後每個點的值爲0(輪廓外)或255(輪廓內) – Miki

回答

1

我不知道,如果你的代碼來測試點僅此:

x1 = cv2.pointPolygonTest(contours[0], (x, y), False) 

在這段代碼中,函數只是測試第一個輪廓。也許在第二個圖像中有多個輪廓,請嘗試使用循環。