首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV变换矩阵:仿射与透视翘曲

问OpenCV变换矩阵:仿射与透视翘曲
EN

Stack Overflow用户
提问于 2017-08-11 14:19:49
回答 1查看 10K关注 0票数 11

嗨,我现在正在做图像转换,但是有一件事我不明白。即warpAffine()和warpPerspective()有什么区别?

我说的这并不是说在转变方面有什么不同。我的问题是,为什么我可以在上述两个函数中使用相同的转换矩阵(3x3)?输出是否相同(如果使用相同的转换矩阵运行)

或者什么时候用一个,什么时候用另一个?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-11 22:59:25

仿射变换可以被认为是所有可能的透视图转换的子集,也就是同族。

它们之间的主要功能差异是仿射变换总是将平行线映射到平行线,而同伦图可以将平行线映射到相交线,反之亦然。

​

​

从正则平方开始,您可以看到平移变换和欧氏变换(旋转、均匀缩放和平移)保持了高宽比;应用的结果仍然是正方形。然而,仿射变换可以将正方形压缩成任意方向的矩形,它还可以向正方形提供剪切/倾斜。但是请注意,仿射变换后的形状是平行四边形--边仍然是平行的。如果是同调的话,情况就不一定是这样。平行线可能被扭曲,使它们相交。因此,由同形变换的矩形的结果是一般的四边形,而用仿射变换变换的矩形的结果总是平行四边形。

函数warpAffine()和warpPerspective()不一定需要是两个不同的函数。写入为3x3矩阵的任何仿射变换都可以传递到warpPerspective()中,并进行同样的转换;换句话说,可以使像warpPerspective这样的函数接受2x3和3x3矩阵。但是,由于额外的行,透视图转换会应用额外的步骤,所以这样做不太有效。另外,warpPerspective执行一个除法,因此操作中可能会出现更大的浮点错误,这对于仿射转换来说是不必要的。最后,不需要创建一个3x3平方矩阵,就可以反演仿射翘曲。总之,将它们保持为单独的函数是有意义的。

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

https://stackoverflow.com/questions/45637472

复制
相关文章

相似问题

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