来自代码
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)
print(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行吗?以及我该怎么办?
答案 0 :(得分:1)
基本上您是对的,仿射变换是透视变换的特例。
单位矩阵的透视变换不会导致输出更改: (身份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. ]
->看看