点::(x y)是已知的。

我在三角形区域内有点。
我知道初始位置和最终位置的顶点坐标。我知道三角形区域内所有点的初始坐标。

现在,我想找出三角形区域内所有点的最终坐标。

下图显示了初始位置和最终位置中的点。



谁能告诉我如何在OpenCV和C++平台中执行此操作?

我也可以对任意形状的轮廓进行加工吗?

最佳答案

我正在使用3D坐标来考虑

  • 由 vector [u v]翻译
  • 由matrixabcd进行的2D线性变换

  • 整体转换矩阵将具有以下形式
        [ a b u]
    M = [ c d v]
        [ 0 0 1]
    
  • 从三角形
  • 中取3点A=[x1 y1 1]B=[x2 y2 1]C=[x3 y3 1]
  • 将它们与A' = [x1' y1' 1]B'=[x2' y2' 1]C'=[x3' y3' 1]转换后的位置进行比较。标价:做数学运算以获得变换矩阵M,以便A' = M AB' = M B以及C' = M C
  • x -> M x应用于每个输入点

  • 编辑:使用Translation in transformation matrix将翻译合并到矩阵M

    编辑:似乎“做你的数学”对你来说还不清楚。

    您将意识到这三个方程可以写成:
    [x1' x2' x3']     [x1 x2 x3]
    [y1' y2' y3'] = M [y1 y2 y3]
    [1   1   1  ]     [1  1  1 ]
    

    要么
    X' = M X
    

    要么
    M = X . X'^-1
    

    是的,OpenCV在矩阵上具有函数inv()

    07-24 09:53