我尝试使用轴点执行基本的仿射变换。在
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()
在这两张图片上,我都做了3点(R,G&B),并将它们保存在单独的图像中(“地球”)_按键.png'为'地球.png“和”地球2_按键.png'代表'earth2.png')。我只想把“earth2.png”上的轴点与轴点匹配地球.png'. 在
我假设我错放了一些论点或类似的东西,但我尝试了所有的组合,得到了所有类型的错误结果,但仍然无法发现。在
编辑: 已将轴数更改为6
M现在等于
^{pr2}$
你对自己的支点有多自信?
如果我把它们画在你的图像上,我会得到:
叠加后的结果是:
如果我为3个对应项手动定义点,则得到:
这还不是完美的,但它可能更接近你想要达到的目标。在
最后,我建议您检查您是如何计算关键点的,如果有疑问,可以手动进行叠加。在
相关问题 更多 >
编程相关推荐