出于某种原因,每当我使用 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 透视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持前端之家!