嗨,我现在正在做图像转换,但是有一件事我不明白。即warpAffine()和warpPerspective()有什么区别?
我说的这并不是说在转变方面有什么不同。我的问题是,为什么我可以在上述两个函数中使用相同的转换矩阵(3x3)?输出是否相同(如果使用相同的转换矩阵运行)
或者什么时候用一个,什么时候用另一个?
发布于 2017-08-11 22:59:25
仿射变换可以被认为是所有可能的透视图转换的子集,也就是同族。
它们之间的主要功能差异是仿射变换总是将平行线映射到平行线,而同伦图可以将平行线映射到相交线,反之亦然。

从正则平方开始,您可以看到平移变换和欧氏变换(旋转、均匀缩放和平移)保持了高宽比;应用的结果仍然是正方形。然而,仿射变换可以将正方形压缩成任意方向的矩形,它还可以向正方形提供剪切/倾斜。但是请注意,仿射变换后的形状是平行四边形--边仍然是平行的。如果是同调的话,情况就不一定是这样。平行线可能被扭曲,使它们相交。因此,由同形变换的矩形的结果是一般的四边形,而用仿射变换变换的矩形的结果总是平行四边形。
函数warpAffine()和warpPerspective()不一定需要是两个不同的函数。写入为3x3矩阵的任何仿射变换都可以传递到warpPerspective()中,并进行同样的转换;换句话说,可以使像warpPerspective这样的函数接受2x3和3x3矩阵。但是,由于额外的行,透视图转换会应用额外的步骤,所以这样做不太有效。另外,warpPerspective执行一个除法,因此操作中可能会出现更大的浮点错误,这对于仿射转换来说是不必要的。最后,不需要创建一个3x3平方矩阵,就可以反演仿射翘曲。总之,将它们保持为单独的函数是有意义的。
https://stackoverflow.com/questions/45637472
复制相似问题