如何使用cv :: remap与前向网格而不是反向网格来扭曲图像?

Vor*_*rac 9 opencv image-processing

我有一个11 x 11顶点的网格.这个想法是每个点(顶点)保持扭曲图像中该像素的标准化浮点位置.例如,如果我想拉伸左上边缘,我会写入第一个顶点(-0.1,-0.1).

我有网格,但没有图像变形功能.cv :: remap正是这样......但是以相反的顺序 - 网格"说"哪个像素邻域要映射到输出上的常规网格.

OpenCV中是否有标准的方法来处理反向扭曲?我可以轻松转换网格或使用其他功能吗?我正在使用OpenCV和Boost,但是这样做的任何免费库/工具都适用于我.

PS:我需要在linux上运行这个.

Sam*_*Sam 1

您需要计算另一个映射来进行逆变换。

但是,为此您需要变换公式或矩阵。

步骤 1:在重新映射的图像上选择 4 个点。一个好主意是取角,如果角不是黑色的(未定义)

第 2 步:在原始图像中找到它们的位置(查看地图)

步骤 3:计算两组点之间的单应性。findHomoraphy()是关键。

第四步:扭曲透视第二张图像。在内部,它计算网格,然后调用 remap();

如果您具有与之前相同的变换,请使用 findHomography 中的输出点反转输入点,或 inv() 结果矩阵。

如果您想要多次调用贴图(这比每次调用 warpPerspective 更快),您必须将 warpPerspective 中的代码复制到新函数中。