Tôi đang cố gắng thực hiện chuyển đổi affine cơ bản bằng cách sử dụng các điểm pivot.Biến đổi affine OpenCV sẽ không thực hiện
import cv2
import numpy as np
import PIL
import matplotlib.pyplot as plt
img = cv2.imread('earth.png')
img_pivots = cv2.imread('earth_keys.png')
map_img = cv2.imread('earth2.png')
map_pivots = cv2.imread('earth2_keys.png')
pts_img_R = np.transpose(np.where(img_pivots[:, :, 2] > 0))
pts_img_G = np.transpose(np.where(img_pivots[:, :, 1] > 0))
pts_img_B = np.transpose(np.where(img_pivots[:, :, 0] > 0))
pts_img = np.vstack([pts_img_R, pts_img_G, pts_img_B])
pts_map_R = np.transpose(np.where(map_pivots[:, :, 2] > 0))
pts_map_G = np.transpose(np.where(map_pivots[:, :, 1] > 0))
pts_map_B = np.transpose(np.where(map_pivots[:, :, 0] > 0))
pts_map = np.vstack([pts_map_R, pts_map_G, pts_map_B])
M = cv2.estimateRigidTransform(pts_map.astype(np.float32), pts_img.astype(np.float32), True)
dst = cv2.warpAffine(map_img,M,(img.shape[1], img.shape[0]))
plt.subplot(121),plt.imshow(img),plt.title('earth.png')
plt.subplot(122),plt.imshow(dst),plt.title('earth2.png transrofmed')
plt.show()
Trên cả hình ảnh tôi đã thực hiện được 3 điểm (R, G & B) và lưu chúng trong hình ảnh riêng biệt ('earth_keys.png' cho 'earth.png' và 'earth2_keys.png' cho 'earth2.png '). Tất cả những gì tôi muốn là khớp các điểm pivot trên 'earth2.png' với các điểm pivot trên 'earth.png'.
Tuy nhiên, tất cả tôi nhận được sau khi chuyển đổi được này
Tôi giả định rằng tôi bị thất lạc một số đối số hoặc một cái gì đó như thế này, nhưng tôi đã cố gắng tất cả các kết hợp và nhận được tất cả các loại kết quả sai, nhưng vẫn có thể' t phát hiện nó.
Edit: trụ đã thay đổi số để 6
M bây giờ bằng
array([[ 4.33809524e+00, 8.28571429e-01, -5.85633333e+02],
[ -6.22380952e+00, -1.69285714e+00, 1.03468333e+03]])
bạn có thể thử sử dụng hơn 3 điểm không? có các hình thức cứng nhắc cho phép tối thiểu 3 điểm, nhưng openCV có tham số "fullAffine". Nếu điều này được thiết lập, tôi nghĩ rằng có nhiều hơn 6 dof. Bạn có thể cho chúng tôi biết giá trị kết quả của M không? – Micka
chỉ cần kiểm tra .. 6dof nên ok cho fullAffine nên 3 cặp điểm nên được ok. vui lòng in và thêm M – Micka
Đã thêm 3 điểm xoay khác và chỉnh sửa câu hỏi, vẫn có điều gì đó sai. Bạn đang sử dụng cùng một mã? – arkhy