Как использовать estimateRigidTransform в OpenCV 3.0 или выше, есть ли другая альтернатива?

#python #numpy #opencv #video-processing

#python #numpy #opencv #обработка видео

Вопрос:

Я хочу использовать функцию estimateRigidTransform в OpenCV, но она выдает ошибку.

Трассировка ошибки атрибута (последний последний вызов) в 30 31 # Найти матрицу преобразования —> 32 m = cv2.estimateRigidTransform(prev_pts, curr_pts, fullAffine = False) # будет работать только с OpenCV-3 или менее 33 34 # Извлечь передачу

Ошибка атрибута: модуль ‘cv2.cv2’ не имеет атрибута ‘estimateRigidTransform’

моя версия OpenCV — 4.0.0.

Ответ №1:

Как указано в документации estimateRigidTransform , эта функция устарела:

Устаревший: вместо этого используйте cv ::estimateAffine2D, cv ::estimateAffinePartial2D. Если вы используете эту функцию с изображениями, извлеките точки с помощью cv::calcOpticalFlowPyrLK, а затем используйте функции оценки.

cv::estimateAffine2D должно быть более устойчивым к шуму, но более дорогостоящим в вычислительном отношении, чем cv::estimateAffinePartial2D . Они аналогичны estimateRigidTransform с fullAffine параметром, установленным в true или false , соответственно.

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

1. new_t = cv2.estimateRigidTransform(img, anchor, fullAffine=False), где размер привязки = (1280, 1920) и размер img = (1280, 1920) не работает. Я заменяю estimageRigidTransofrm на estimateAffice2d(img, anchor) и получаю эту ошибку cv2.ошибка: OpenCV(4.1.2) / io/ opencv /modules/calib3d /src /ptsetreg.cpp:831: ошибка: (-215: ошибка утверждения) count >= 0 amp;amp; to.checkVector(2) == подсчет в функции ‘estimateAffine2D’ Как внести исправления?