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

时间:2012-01-27 13:46:43

标签: image-processing opencv

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

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

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

PS:我需要在Linux PC上运行它。

2 个答案:

答案 0 :(得分:1)

您需要为反向变换计算另一个地图。

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

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

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

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

第4步: warpPerspective第二张图片。在内部,它计算网格,然后调用remap();

如果您具有与之前相同的变换,则使用findHomography中的输出点反转输入点,或者将inv()反转为生成的矩阵。

如果你想拥有多个调用的地图(它比每次调用warpPerspective更快),你必须在一个新函数中复制warpPerspective中的代码。

答案 1 :(得分:1)

您可能需要查看http://code.google.com/p/imgwarp-opencv/。这个库似乎正是你所需要的:基于稀疏网格的图像变形。