我正在开展一个项目,该项目试图根据相机的已知方向从图像中消除透视失真。我的想法是,我可以根据相机的已知 X、Y 和 Z 方向创建一个旋转矩阵。然后我可以通过 WarpPerspective 方法将这些矩阵应用于图像。
在我的脚本(用 Python 编写)中,我创建了三个旋转矩阵,每个都基于一个方向角。我已经到了一个我被困在两个问题上的地步。首先,当我将每个单独的矩阵加载到 WarpPerspective 方法中时,它似乎无法正常工作。每当我在一个轴上扭曲图像时,它似乎都会显着过度扭曲图像。仅当我将方位角限制在 1 度或以下时,才能识别图像的内容。
其次,如何将三个旋转矩阵组合成一个矩阵以加载到 WarpPerspective 方法中。我可以将 3x3 旋转矩阵导入该方法,还是必须创建一个 4x4 投影矩阵。下面是我正在处理的代码。
谢谢您的帮助。
铬
from numpy import *
import cv
#Sets angle of camera and converts to radians
x = -14 * (pi/180)
y = 20 * (pi/180)
z = 15 * (pi/180)
#Creates the Rotational Matrices
rX = array([[1, 0, 0], [0, cos(x), -sin(x)], [0, sin(x), cos(x)]])
rY = array([[cos(y), 0, -sin(y)], [0, 1, 0], [sin(y), 0, cos(y)]])
rZ = array([[cos(z), sin(z), 0], [-sin(z), cos(z), 0], [0, 0, 1]])
#Converts to CVMat format
X = cv.fromarray(rX)
Y = cv.fromarray(rY)
Z = cv.fromarray(rZ)
#Imports image file and creates destination filespace
im = cv.LoadImage("reference_image.jpg")
dst = cv.CreateImage(cv.GetSize(im), cv.IPL_DEPTH_8U, 3)
#Warps Image
cv.WarpPerspective(im, dst, X)
#Display
cv.NamedWindow("distorted")
cv.ShowImage("distorted", im)
cv.NamedWindow("corrected")
cv.ShowImage("corrected", dst)
cv.WaitKey(0)
cv.DestroyWindow("distorted")
cv.DestroyWindow("corrected")