python - 如何使仿射变换矩阵成为透视变换矩阵?

标签 python numpy opencv matrix affinetransform

从代码

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行吗?我该怎么办?

最佳答案

基本上您是对的,仿射变换是透视变换的特例。
单位矩阵的透 View 转换不会改变输出:
(身份为3x3矩阵)

[1,0,0]
[0,1,0]
[0,0,1] 
因此,如果希望仿射变换矩阵增长到透 View ,则要添加此恒等矩阵的最后一行。
您的示例如下所示:
 [ 0.67365771  0.7390435   0. ]
 [-0.7390435   0.67365771  0. ]
 [ 0.          0.          1. ]
应用上述透视垫的效果与您应用仿射变换的效果相同:
 [ 0.67365771  0.7390435   0.  ]
 [-0.7390435   0.67365771  0.  ]
->看看
  • affie transformation wikipedia
  • Opencv generate identity matrix
  • identity matrix wikipedia
  • 关于python - 如何使仿射变换矩阵成为透视变换矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61463346/

    相关文章:

    python - 在python中计算表面拟合后3D偏差的均方根

    python - 在python中连接几个np数组

    python - 使用两个变量优化 cumprod()

    c++ - 改变图像的亮度和对比度

    python - 解析所有可能的 YouTube 网址

    python - 在python中转换为日期时间

    c++ - 用数据点填充矩阵

    python - 如何创建 "bluescale"图像

    Python 2.6 文件存在 errno 17,

    python - 使用 None 作为关键字参数的参数