Я хотел бы использовать 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 изображения он работает отлично:
x1 правильно рассчитывается, когда (x,y)
находится внутри объекта
np.shape(contours)
равно (1, 241, 1, 2)
Однако на этом изображении :
все точки рассчитываются как за пределами
np.shape(contours)
равно (11,)
Я предполагаю, что я не использую контуры надлежащим образом, но я не могу понять, какой размер контуров должен Я перехожу к cv2.pointPolygonTest()
Обычно проще нарисовать белые заполненные контуры на черной инициализированной бинарной маске ('drawContours'), а затем каждая точка имеет либо значения 0 (внешний контур), либо 255 (внутренний контур) – Miki