来自代码
rotation = cv2.getRotationMatrix2D((0, 0), 47.65, 1.0)我得到了一个旋转变换矩阵,如:
[[ 0.67365771 0.7390435 0. ]
[-0.7390435 0.67365771 0. ]]由于旋转是仿射变换的特例,我认为这是一个有效的仿射变换矩阵,对吗?
由于仿射变换是透视变换的一个特例,我也认为如果在此基础上做一些修改,这个矩阵就是一个有效的透视变换矩阵。
所以我尝试添加1行,使其形状为3 x 3。
newrow = numpy.array([numpy.array([1, 1, 1])]) # [[0 0 0]]
rotation3 = numpy.append(rotation, newrow, axis=0)打印(Rotation3):
[[ 0.67365771 0.7390435 0. ]
[-0.7390435 0.67365771 0. ]
[ 1. 1. 1. ]]但rotation3似乎不能作为透视矩阵正常工作,下面是我如何测试它的:
rotated_points = cv2.perspectiveTransform(points, rotation3)rotated_points看起来不像是points的旋转
% 1,% 1,%1是正确的第3行吗?我是否也应该更改第1行和第2行?我该怎么做呢?
发布于 2020-08-07 17:19:26
基本上你是对的,仿射变换是透视变换的一个特例。
单位矩阵的透视变换不会导致输出发生变化:(单位3x3矩阵)
[1,0,0]
[0,1,0]
[0,0,1] 因此,如果您希望仿射变换矩阵增长为透视矩阵,则需要添加此单位矩阵的最后一行。
您的示例将如下所示:
[ 0.67365771 0.7390435 0. ]
[-0.7390435 0.67365771 0. ]
[ 0. 0. 1. ]应用上述透视垫的效果与应用仿射变换的效果相同:
[ 0.67365771 0.7390435 0. ]
[-0.7390435 0.67365771 0. ]-->看一下
https://stackoverflow.com/questions/61463346
复制相似问题