【问题标题】:OpenCvSharp PCA Exception: Unsupported combination of input and output array formatsOpenCvSharp PCA 异常:输入和输出数组格式的不支持组合
【发布时间】:2015-10-11 22:16:35
【问题描述】:

我正在使用 OpenCVSharp(OpenCvSharp3-AnyCPU 版本 3.0.0.20150823 在 Visual Studio 2015 中运行并通过 NuGet 安装)从 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
}

我找不到任何关于如何初始化均值和特征向量垫的文档,或者我调用 PCACompute 的方式是否正确。了解使用 PCACompute 的正确过程会非常有帮助。

【问题讨论】:

    标签: c# opencv pca opencvsharp


    【解决方案1】:

    所以事实证明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);
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 2018-08-21
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多