Код: Выделить всё
cv2.error: OpenCV(4.13.0) /io/opencv/modules/imgproc/src/convhull.cpp:397: error: (-5:Bad argument) The convex hull indices are not monotonous, which can be in the case when the input contour contains self-intersections in function 'convexityDefects'
Код: Выделить всё
import cv2
import numpy as np
cont = np.array([[364,633],[364,636],#[360,636],
[408,599],[409,599],[355,557],
[351,571],[349,573],[347,573]])
hull = cv2.convexHull(cont, returnPoints=False)
defects = cv2.convexityDefects(cont, hull)
Дополнительные подробности, если они актуальны:
- Приведенный список точек представляет собой небольшой воспроизводимый пример — мои фактические наборы точек обычно составляют несколько сотен точек. Я придумал этот пример, удаляя точки из фактического набора, пока не получил пример разумного размера.
- Мои наборы точек создаются с помощью обнаружения краев для поиска линий, нарисованных на отсканированном листе бумаги, и использования кластеризации для группировки линий, которые находятся ближе всего друг к другу в пространстве. Я объединяю набор контуров для каждого кластера в один контур, используя numpy vstack — контур, вокруг которого я пытаюсь нарисовать выпуклую оболочку. Я подозреваю, что именно поэтому мои контуры представляют собой форму, вызывающую проблемы с функцией convexityDefects. Я могу добавить этот код к вопросу, если это полезно.
Могу ли я что-нибудь сделать, чтобы получить контур и выпуклую оболочку, которые работают с функция convexityDefects?