您好,我目前正在研究图像转换,但有一件关于扭曲的事情我不明白。即有什么区别warpAffine() http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#warpaffine and warpPerspective() http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#warpperspective?
我的意思根本不是说转型有什么区别。我的问题是为什么我可以在上述两个函数中使用相同的变换矩阵(3x3)?输出是否相同(如果使用相同的变换矩阵运行)
或者何时使用其中一种,何时使用另一种?
仿射变换 https://en.wikipedia.org/wiki/Affine_transformation可以被认为是所有可能的透视变换的子集,又名同形异义词 https://en.wikipedia.org/wiki/Homography.
它们之间的主要功能区别是仿射变换always将平行线映射到平行线,而单应性can将平行线映射到相交线,反之亦然。
从规则的正方形开始,您可以看到平移和欧几里得变换(旋转、均匀缩放和平移)保持了纵横比;应用的结果仍然是一个正方形。然而,仿射变换可以将正方形在任一方向上压缩成矩形,并且还可以为正方形提供剪切/倾斜。但请注意,应用仿射变换后的形状是平行四边形——边仍然平行。对于单应性,情况不必如此。平行线可以扭曲以使它们相交。因此,矩形经单应性变换的结果是一般四边形,而矩形经仿射变换变换的结果始终是平行四边形。
功能warpAffine()
and warpPerspective()
不一定需要是两个不同的函数。任何写为 3x3 矩阵的仿射变换都可以传递到warpPerspective()
并同样改变了;换句话说,像这样的函数warpPerspective
可以采用 2x3 和 3x3 矩阵。但是,由于存在额外的行,透视转换会应用额外的步骤,因此这样做的效率不高。还,warpPerspective
执行除法,因此运算中可能会引入较大的浮点误差,而这对于仿射变换来说是不必要的。最后,可以在不创建 3x3 方阵并将其反转的情况下完成仿射扭曲的反转。总而言之,将它们保留为单独的功能是有意义的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)