选定区域的仿射变换

时间:2013-12-01 20:12:43

标签: opencv image-processing affinetransform

我想在图像的选定部分创建一个仿射变换工具(4角多边形,见图像链接)。 http://s14.postimg.org/fn9btus8h/explanation.png

我尝试使用opencv但没有成功。

感谢您的帮助。 此致

2 个答案:

答案 0 :(得分:1)

您应该向我们展示您尝试过的内容,以及您未获得成功的方法。 您可能使用错误的点来创建转换矩阵。 正确的程序如下所述。

您应该使用getAffineTransform创建仿射变换矩阵。这将输入三角形映射到输出三角形,如documentation中所述。但是你应该确保你通过了两架飞机的三个对应点。

如果您不确定如何选择两个平面的三个对应点,只需使用getPerspectiveTransform并按各自的顺序传入两个平面的四个点。它仍然有效,因为仿射变换只是透视变换的一个特例。

获取转换矩阵后,您应使用warpAffinewarpPerspective进行映射 输入图像。

答案 1 :(得分:1)

感谢大家的帮助。我找到了解决方案。

我使用了Qt功能。这是我的代码:

QImage img;
img.load("D:\\sample.png");
QPolygonF polygonIn;
polygonIn  << QPointF(29, 25)
    << QPointF(147, 9)
    << QPointF(210, 100)
    << QPointF(0, 84);

QPolygonF polygonOut;   
polygonOut  << QPointF(29, 25)
    << QPointF(147, 25)
    << QPointF(210, 132)
    << QPointF(0, 84);

QTransform transform;
auto isOk = QTransform::quadToQuad(polygonIn, polygonOut, transform);
if(!isOk)
    throw std::runtime_error("Transformation impossible with such parameters.");

img = img.transformed(transform.toAffine(), Qt::TransformationMode::SmoothTransformation);