【问题标题】:Affine transformation of selected area选定区域的仿射变换
【发布时间】:2013-12-01 20:12:43
【问题描述】:

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

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

感谢您的帮助。 问候

【问题讨论】:

    标签: opencv image-processing affinetransform


    【解决方案1】:

    您应该向我们展示您的尝试,以及您如何没有成功。 您可能使用错误的点来创建转换矩阵。 正确的步骤如下所述。

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

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

    得到变换矩阵后,应使用warpAffinewarpPerspective进行映射 输入图像。

    【讨论】:

      【解决方案2】:

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

      我使用了 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-17
        • 2013-07-04
        • 1970-01-01
        • 1970-01-01
        • 2016-01-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多