getPerspectiveTransform 和 warpPerspective 如何工作? [Python]

How getPerspectiveTransform and warpPerspective work? [Python]

我找不到关于 getPerspectiveTransformwarpPerspective 如何在 OpenCV 中工作的完美解释,特别是在 Python 中。我对这些方法的理解是:

给定来自源图像的 4 个点和 4 个新点 getPerspectiveTransform returns 一个 (3, 3) 矩阵,当作为参数发送到 warpPerspective 时以某种方式裁剪图像。我认为这 4 个点(来自 src 图像)在图像上形成一个多边形,然后是 removed/cropped 然后这个新裁剪的图像被安装在新给定的 4 个点之间,我还看到 warpPerspective 需要新图像的输入大小。所以我推断这是因为,如果新点的 max-height/max-width(从点计算...想象点是矩形或四边形的角)小于提供的宽度或高度,则剩余区域留空这本质上是 black/white,但事实并非如此......如果从新点计算出的 width/height 小于提供的宽度和高度,则剩余的 space 将填充一些源图像的一部分,本质上是 4 个源点的外部...

我无法理解这种行为...

我是不是对这些方法的解释不正确?如果是,请提供这些方法的正确解释。

PS。我是 OpenCV 的新手,如果有人解释 getPerspectiveTransform warpPerspective.

使用的基础数学,那就太好了

提前致谢。

这些函数是称为几何变换的图像处理概念的一部分。 在现实生活中拍照时,总会存在某种几何失真,可以使用几何变换将其消除。它还有其他应用,包括马赛克构造、地理制图、立体声和视频。

这是来自 this site 的示例:

所以基本上 warpPerspective 将源图像转换为它的所需版本,它使用 getPerspectiveTransform.

给出的 3*3 转换矩阵来完成这项工作

查看更多详情here

现在如果您想知道如何从源图像和目标图像中找到那对 4 个点,您应该查看另一个图像处理概念,称为特征提取。这些方法可以完美地找到图像的重要区域,您可以将它们与从不同视图拍摄的同一对象的另一幅图像进行匹配。 (检查 SIFT、SURF、ORB 等)

匹配特征的示例:

所以warpPerspective不会只是裁剪你的图像,它会根据变换矩阵转移整个图像(不仅仅是由4个点指定的区域),这些点只会用于找到正确的矩阵。