У меня есть два набора совпадающих точек, например.
# first set of points
[[696.0, 971.3333333333334], [1103.3333333333333, 934.6666666666666], ...]
# second set of points
[[475.0, 458.6666666666667], [1531.3333333333333, 524.0], ...]
из двух изображений. Прямо сейчас я использую этот кусок кода для выравнивания изображений:
points_source = np.array(source_coordinates)
points_destination = np.array(destination_coordinates)
h, status = cv2.findHomography(points_destination, points_source, cv2.RANSAC)
aligned_image = cv2.warpPerspective(destination_image, h, (source_image.shape[1], source_image.shape[0]))
Большую часть времени он работает хорошо, но иногда искажает изображение и плохо выравнивает. Я нашел estimateRigidTransform
функцию, которая была бы лучшей для меня, потому что возможно только перевести и повернуть изображение, но оно устарело, и когда я пытаюсь использовать его, оно выдает ошибку:
Traceback (most recent call last):
File "align.py", line 139, in <module>
align(image, image2, source_coordinates, destination_coordinates)
File "align.py", line 111, in align
m = cv2.estimateRigidTransform(points_destination, points_source, fullAffine=False)
AttributeError: module 'cv2' has no attribute 'estimateRigidTransform'
Я не смог найти другого решения, кроме estimateRigidTransform
. Есть ли другая функция, которая будет работать для меня? Может быть, я могу использовать warpPerspective
только для изменения поворота и перевода? Я не хочу использовать функцию getAffineTransform
, потому что она может принимать только три балла, и я хочу использовать гораздо больше баллов. Моя версия OpenCV 4.0.1-1