Как использовать OpenCV cornerSubPix() в Python?

Я пытаюсь получить и нарисовать угловые точки на изображении. Теперь у меня есть список кортежей в следующем формате: (row,column,scale) (масштаб из-за того, что я использую пирамиду Гаусса), полученный из процессов harrisCornerDetector и nonMaximumSupression вручную. Этот список featuresy1,

Мой код следующий:

r,g,b=cv2.split(image)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
cv2.cornerSubPix( r, featuresy1, (5,5), (-1,1), criteria )

Где изображение - это изображение в оттенках серого с тремя одинаковыми формами. Как видите, я даю cornerSubPix в качестве второго параметра такая структура: [(x1,y1,scale1),(x2,y2,scale2),...,(xn,yn,scalen)],

Это вызывает следующую ошибку:

cv2.cornerSubPix( r, featuresy1, (5,5), (-1,1), criteria )
TypeError: corners is not a numpy array, neither a scalar

По этой причине мне интересно, какой тип, формат или структура должны иметь featuresy1 сделать cornerSubPix() за работой. Это единственное, что я делаю не так? Существует не так много документации по этому поводу.

Спасибо!

1 ответ

Вы должны убедиться, corners это массив Numpy с 3 измерениями (n, 1, 2)где n - количество углов. Это также должен быть тип float32.

Просто введите

corners.shape

чтобы проверить это.

Введите

corners.dtype

Для проверки вы используете float32.

Для меня это похоже на ваши углы featuresy1 список, где он должен быть массивом NumPy. Сначала преобразуйте его в массив numpy:

featuresy1 = np.array(featuresy1)

Opencv имеет простой для понимания пример, который может помочь вам

Другие вопросы по тегам