2016-04-07 9 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) 

В этом коде функция просто проверяет первый контур. Возможно, во втором изображении есть несколько контуров, чтобы попытаться использовать цикл.

Смежные вопросы