gpt4 book ai didi

python - OpenCV 仿射变换不会执行

转载 作者:太空狗 更新时间:2023-10-29 21:45:40 25 4
gpt4 key购买 nike

我正在尝试使用枢轴点执行基本的仿射变换。

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)并将它们保存在单独的图片中(“earth.png”为“earth_keys.png”,“earth2.png”为“earth2_keys.png”)。我只想将“earth2.png”上的枢轴点与“earth.png”上的枢轴点相匹配。

不过,变身后的我还是这样 enter image description here

我假设我放错了一些参数或类似的东西,但我尝试了所有组合并得到了所有类型的错误结果,但仍然无法发现它。

Example images (with pivots)

编辑:将枢轴数更改为 6

还是错误的改造 enter image description here

M 现在等于

 array([[  4.33809524e+00,   8.28571429e-01,  -5.85633333e+02],
[ -6.22380952e+00, -1.69285714e+00, 1.03468333e+03]])

Example with 6 pivots

最佳答案

您对自己的枢轴点有多自信?

如果我将它们绘制在您的图像上,我会得到: Plotting points

在手动叠加之后,它给出了类似于您的结果的东西: Manual superposition

如果我为 3 个对应关系手动定义点,我会得到:

pts_img = np.vstack([[68,33],   [22,84],  [113,87]] )
pts_map = np.vstack([[115,101], [30,199], [143,198]])

Result for manual points

它仍然不完美,但它可能更接近您想要实现的目标。

最后,我建议您检查您如何计算关键点,如有疑问,进行手动叠加

关于python - OpenCV 仿射变换不会执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37099602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com