OpenCvSharp PCA异常:不支持输入和输出数组格式的组合

本文关键字:数组 输出 格式 组合 输入 PCA 异常 不支持 OpenCvSharp | 更新日期: 2023-09-27 18:17:15

我使用OpenCVSharp (OpenCvSharp3-AnyCPU版本3.0.0.20150823在Visual Studio 2015中运行并通过NuGet安装)从c#访问OpenCV,但是当调用Cv2.PCACompute时,我得到一个通用的OpenCVException声明我有一个不支持的输入和输出数组格式组合

我的目标是使用PCA来找到像素blob的主轴。这是我目前的代码:

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
}

我还没能找到关于如何初始化均值和特征向量垫的任何文档,或者如果我调用pcaccompute的方式是正确的。对使用pcaccomputer的正确步骤有一些深入的了解将会非常有帮助。

OpenCvSharp PCA异常:不支持输入和输出数组格式的组合

所以dataPoints不可能是MatType.CV_32SC1。将代码更改为以下代码允许它工作:

// create the input matrix
Mat input = new Mat(dataPoints.Length, 2, MatType.CV_32FC1);
for (int i = 0; i < dataPoints.Length; ++i)
{
    input.Set(i, 0, (float)dataPoints[i].X);
    input.Set(i, 1, (float)dataPoints[i].Y);
}