OpenCV 透视图

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

chengwei8520 回答:OpenCV 透视图

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

可以使用矩阵乘法组合单应性(这就是它们如此强大的原因).如果 A 和 B 是单应性,则 AB 表示先应用 B 再应用 A 的单应性.

因此,我们需要做的就是通过一些偏移为翻译创建单应矩阵,然后将其与原始单应矩阵相乘

二维单应矩阵如下所示:

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

其中 R 表示旋转矩阵,T 表示平移,P 表示透视扭曲.所以一个纯粹的翻译单应性看起来像这样:

[ 1 , 0 , x_offset]
[ 0 , 1 , y_offset]
[ 0 , 0 ,    1    ]

因此,只需将您的单应性乘以类似于上述的矩阵,您的输出图像就会发生偏移.

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

这篇关于OpenCV 透视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持前端之家!

本文链接:https://www.f2er.com/3187866.html

大家都在问