首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将仿射变换矩阵转化为透视变换矩阵?

问如何将仿射变换矩阵转化为透视变换矩阵?
EN

Stack Overflow用户
提问于 2020-04-28 00:15:27
回答 1查看 153关注 0票数 0

来自代码

代码语言:javascript
复制
rotation = cv2.getRotationMatrix2D((0, 0), 47.65, 1.0)

我得到了一个旋转变换矩阵,如:

代码语言:javascript
复制
[[ 0.67365771  0.7390435   0.        ]
 [-0.7390435   0.67365771  0.        ]]

由于旋转是仿射变换的特例,我认为这是一个有效的仿射变换矩阵,对吗?

由于仿射变换是透视变换的一个特例,我也认为如果在此基础上做一些修改,这个矩阵就是一个有效的透视变换矩阵。

所以我尝试添加1行,使其形状为3 x 3。

代码语言:javascript
复制
newrow = numpy.array([numpy.array([1, 1, 1])])  # [[0 0 0]]
rotation3 = numpy.append(rotation, newrow, axis=0)

打印(Rotation3):

代码语言:javascript
复制
[[ 0.67365771  0.7390435   0.        ]
 [-0.7390435   0.67365771  0.        ]
 [ 1.          1.          1.        ]]

但rotation3似乎不能作为透视矩阵正常工作,下面是我如何测试它的:

代码语言:javascript
复制
rotated_points = cv2.perspectiveTransform(points, rotation3)

rotated_points看起来不像是points的旋转

% 1,% 1,%1是正确的第3行吗?我是否也应该更改第1行和第2行?我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2020-08-07 17:19:26

基本上你是对的,仿射变换是透视变换的一个特例。

单位矩阵的透视变换不会导致输出发生变化:(单位3x3矩阵)

代码语言:javascript
复制
[1,0,0]
[0,1,0]
[0,0,1] 

因此,如果您希望仿射变换矩阵增长为透视矩阵,则需要添加此单位矩阵的最后一行。

您的示例将如下所示:

代码语言:javascript
复制
 [ 0.67365771  0.7390435   0. ]
 [-0.7390435   0.67365771  0. ]
 [ 0.          0.          1. ]

应用上述透视垫的效果与应用仿射变换的效果相同:

代码语言:javascript
复制
 [ 0.67365771  0.7390435   0.  ]
 [-0.7390435   0.67365771  0.  ]

-->看一下

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61463346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档