Как использовать 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 имеет простой для понимания пример, который может помочь вам