Проверка того, попадает ли точка внутрь контуров с помощью pointPolygonTest, всегда возвращает true во вложенных фигурах

#image #opencv #contour

#изображение #opencv #контур

Вопрос:

Я пытаюсь создать контуры, которые я проверяю, попадает ли точка внутрь, но она продолжает возвращать 1, даже если это не так.

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

введите описание изображения здесь

Затем я нахожу количество этого изображения, используя findContours . Ниже приведено изображение. введите описание изображения здесь

Это правильно. Кажется, все в порядке.

Но позже я хочу проверить, попадает ли точка внутрь контуров с помощью pointPolygonTest(белая часть на первом изображении), но это всегда возвращает 1 или 0.

 for point in points
  for contour in contours
     if pointPolygonTest(contour, point, false) >= 0 // this always returns 1
        terminate
  

Я думаю, проблема в том, что контуры вложены. Как я могу добиться этого?

Я хочу, чтобы pointPolygonTest игнорировал часть, которую я пересек красным, потому что они находятся за пределами контуров.

введите описание изображения здесь

Есть идеи о том, что я могу делать неправильно?

Я могу включить код, если в этом есть необходимость, но не думаю, что это необходимо.

Комментарии:

1. Проблема с иерархией см. Этот учебник

Ответ №1:

Проблема заключалась в том, что мне нужно было проверить, есть ли у contor дочерние элементы, а также проверить, удовлетворяет ли он дочерним элементам. Например, принимая большой контур. Если pointPolygonTest возвращает 1 или 0, проверьте, есть ли у контура дочерние элементы, и если да, проверьте, удовлетворяет ли он дочерним элементам.