c++ - 使用 cvWarpPerspective 变形图像导致图像的某些部分超出可视区域

标签 c++ c image-processing opencv

我正在尝试将两张图片拼接在一起。
为此,我提取了筛选特征并使用此 C 实现在两个图像上找到匹配项。

http://web.engr.oregonstate.edu/~hess/index.html

然后我找到了使用匹配点的单应性矩阵。

http://www.ics.forth.gr/~lourakis/homest/

但是如果我在“cvWarpPerspective”函数中使用这个单应矩阵,图像的某些部分会超出可视区域(负坐标)。

为了解决这个问题,我尝试首先通过单应矩阵对图像的四个角进行管道计算来计算边界框。然后移动初始图像然后扭曲它。但这导致变形结果发生变化。

有什么方法可以扭曲图像并将其保持在可视区域中吗?

如果有任何帮助,我将不胜感激。提前致谢...

最佳答案

作为练习,我前段时间尝试过同样的方法,但偶然发现了同样的问题。正如您所描述的那样,我首先通过计算边界框解决了这个问题,然后我编写了自己的变形函数。 Warping 非常简单,但是你需要自己做 lerp。由于无论如何都需要一些像素级加权以获得良好的结果(例如来自不同图像的多个像素可能最终出现在同一个输出像素上,因此需要混合),我并不觉得放弃 cvWarpPerspective 很糟糕。

关于c++ - 使用 cvWarpPerspective 变形图像导致图像的某些部分超出可视区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2885967/

相关文章:

c++ - 扫描 std::array,向前与向后

c++ - rand() 总是在每次运行时输出相同的数字

c - C 中的十进制值被认为是真的吗?

python - 如何在 python 中加快这个图像蒙版创建过程?

c++ - 哪个是链表的更有效实现?

c - 从 memcpy 返回到双变量

c - 如何使用 Doxygen 记录 errno 值?

python - 如何裁剪图像中红点周围的固定补丁

java - exif信息是如何编码的?

c++ - wxWidgets 显示来自 8 位数组的位图