1

OpenCVSharp (Visual Studio 2015 で実行され、NuGet 経由でインストールされた OpenCvSharp3-AnyCPU バージョン 3.0.0.20150823) を使用して C# から OpenCV にアクセスしていますが、呼び出すと、サポートされていない入力配列形式と出力配列形式の組み合わせがあることを示すCv2.PCACompute一般的なOpenCVExceptionが発生します。 .

私の目標は、PCA を使用してピクセル ブロブの主軸を見つけることです。これは現在の私の(取り除かれた)コードです:

using OpenCvSharp;

public struct point2D
{
     public int X;
     public int Y;

     public point2D(int X, int Y)
     {
          this.X = X;
          this.Y = Y;
     }
}

public static void PCA2D()
{
    int height = 5;
    int width = 5;

    int[] image = new int[]
    {
         0,0,0,0,1,
         0,0,0,1,0,
         0,0,1,0,0,
         0,1,0,0,0,
         1,0,0,0,0,
    }

    // extract the datapoints
    List<point2D> dataPoints = new List<point2D>();

    for (int row = 0; row < height; ++row)
    {
         for (int col = 0; col < width; ++col)
         {
              if (image[row * width + col] == 1)
              {
                  dataPoints.Add(new point2D(col, row));
              }
         }
    }

    // create the input matrix
    Mat input = new Mat(dataPoints.Length, 2, MatType.CV_32SC1);

    for (int i = 0; i < dataPoints.Length; ++i)
    {
        input.Set(i, 0, dataPoints[i].X);
        input.Set(i, 1, dataPoints[i].Y);
    }

    Mat mean = new Mat();
    Mat eigenvectors = new Mat();

    // OpenCVException occurs here: unsupported combination of input and output array formats
    Cv2.PCACompute(input, mean, eigenvectors);

    // Code to get orientation from the eigenvectors
}

平均および固有ベクトル Mats を初期化する方法、または PCACompute を呼び出す方法が正しいかどうかについてのドキュメントを見つけることができませんでした。PCACompute を使用するための正しい手順についての洞察は、非常に役立ちます。

4

1 に答える 1