我有一张以某个角度拍摄的棋盘图像。现在我想进行透视变换,使得棋盘图像看起来就像是从正上方拍摄的一样。
我知道我可以尝试使用匹配点之间的'findHomography'方法,但我想避免它,并使用移动传感器的旋转数据等信息来构建自己的单应矩阵。我校准了我的相机以获取内部参数。然后假设以下图像以大约60度角度围绕x轴拍摄。我认为我要做的就是将相机矩阵乘以旋转矩阵,以获得单应矩阵。我尝试使用以下代码,但似乎我没有正确理解某些内容,因为结果图像完全是黑色或白色的。
我已经进行了校准,得到了畸变系数(distortion_coefficients)。如何将其融入代码中以改善结果?
我知道我可以尝试使用匹配点之间的'findHomography'方法,但我想避免它,并使用移动传感器的旋转数据等信息来构建自己的单应矩阵。我校准了我的相机以获取内部参数。然后假设以下图像以大约60度角度围绕x轴拍摄。我认为我要做的就是将相机矩阵乘以旋转矩阵,以获得单应矩阵。我尝试使用以下代码,但似乎我没有正确理解某些内容,因为结果图像完全是黑色或白色的。
import cv2
import numpy as np
import math
camera_matrix = np.array([[ 5.7415988502105745e+02, 0., 2.3986181527877352e+02],
[0., 5.7473682183375217e+02, 3.1723734404756237e+02],
[0., 0., 1.]])
distortion_coefficients = np.array([ 1.8662919398453856e-01, -7.9649812697463640e-01,
1.8178068172317731e-03, -2.4296638847737923e-03,
7.0519002388825025e-01 ])
theta = math.radians(60)
rotx = np.array([[1, 0, 0],
[0, math.cos(theta), -math.sin(theta)],
[0, math.sin(theta), math.cos(theta)]])
homography = np.dot(camera_matrix, rotx)
im = cv2.imread('data/chess1.jpg')
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
im_warped = cv2.warpPerspective(gray, homography, (480, 640), flags=cv2.WARP_INVERSE_MAP)
cv2.imshow('image', im_warped)
cv2.waitKey()
pass
我已经进行了校准,得到了畸变系数(distortion_coefficients)。如何将其融入代码中以改善结果?