由于某种原因,每当我使用OpenCV的warpPerspective()函数时,最终的变形图像都不会包含原始图像中的所有内容。图像的左侧部分似乎被切断。我认为发生这种情况的原因是因为扭曲的图像是在warpPerspective()的 Canvas 的最左侧位置创建的。有什么办法可以解决这个问题?谢谢

最佳答案

发生问题是因为单应性将图像的一部分映射到图像区域之外的负x,y值,因此无法绘制。
我们希望做的是将变形的输出偏移一定数量的像素,以将整个变形的图像“分流”为正坐标(因此在图像区域内)。

可以使用矩阵乘法来组契约(Contract)形异义词(这就是它们如此强大的原因)。如果A和B是单应性,则AB表示应首先应用B,然后应用A的单应性。

因此,我们需要做的就是偏移输出,是为平移创建单应性矩阵以一定的偏移量,然后将其乘以原始的单应性矩阵

2D单应矩阵如下所示:

[R11,R12,T1]
[R21,R22,T2]
[ P , P , 1]

其中R代表旋转矩阵,T代表平移,P代表透视变形。
因此,一个纯平移的单应性看起来像这样:
[ 1 , 0 , x_offset]
[ 0 , 1 , y_offset]
[ 0 , 0 ,    1    ]

因此,只需将您的单应性乘以与上述类似的矩阵,您的输出图像就会被偏移。

(确保使用矩阵乘法,而不是元素明智的乘法!)

10-08 18:51