我想在图像的选定部分创建一个仿射变换工具(4角多边形,见图像链接)。 http://s14.postimg.org/fn9btus8h/explanation.png
我尝试使用opencv但没有成功。
感谢您的帮助。 此致
答案 0 :(得分:1)
您应该向我们展示您尝试过的内容,以及您未获得成功的方法。 您可能使用错误的点来创建转换矩阵。 正确的程序如下所述。
您应该使用getAffineTransform
创建仿射变换矩阵。这将输入三角形映射到输出三角形,如documentation中所述。但是你应该确保你通过了两架飞机的三个对应点。
如果您不确定如何选择两个平面的三个对应点,只需使用getPerspectiveTransform
并按各自的顺序传入两个平面的四个点。它仍然有效,因为仿射变换只是透视变换的一个特例。
获取转换矩阵后,您应使用warpAffine
或warpPerspective
进行映射
输入图像。
答案 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);