我试图根据第二张图片改变第一张图片的视角。为了找到单应性矩阵,我在两个图像中找到了公共对象(白色告示板)的四个坐标。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
img1 = cv2.imread("rgb per.jpg")
img2 = cv2.imread("IR per.jpg")
img_1_coor = np.float32([[1178,425], [1201,425], [1178,439], [1201,439], [1551,778]]) #coordinate of white notice board in rgb image
img_2_coor = np.float32([[370,98], [381,103], [367,107], [380,112], [498,332]]) #coordinate of same object in IR image
for x in range(0,4):
cv2.circle(img1,(img_1_coor[x][0],img_1_coor[x][1]),5,(255,0,0),1)
matplotlib.rcParams['figure.dpi'] = 300
#plt.imshow(img1) #this verified that the found coordinates are correct
#P = cv2.getPerspectiveTransform(img_1_coor,img_2_coor)
H, s = cv2.findHomography (img_1_coor,img_2_coor)
print(s)
perspective = cv2.warpPerspective(img1, H, img2.shape[:2])
plt.imshow(perspective)
#the resulting image
输出图像 我希望输出像图像 1 一样,视角(相机角度)与图像 2 一样。如果这不可能,反之亦然,让图像 2 的视角与图像 1 一样也会有帮助。
有人能告诉我是否可以使用图像中对象的坐标来改变全图像的视角,如果是的话我的代码有什么问题吗?
我推荐一个实现透视变换的计算机视觉包(例如 OpenCV 或他们现在使用的任何东西)。这是一种相当常见的计算机视觉操作。它也被不太恰当地称为角固定。
如果您希望自己实现它作为练习,您可以查看直接线性变换,在齐次坐标中解决矩阵问题,可能通过使用奇异值分解。