如何将Image <gray,byte =“”>转换为1D Matrix <float>?</float> </gray,>

时间:2012-09-11 08:47:35

标签: c# image matrix emgucv

我有Image<Gray, Byte> trainImage,大小为NxN,我想将其更改为大小为Matrix<float>的1D (N^2)x1 trainMatrix。

我要做的是致电CvInvoke.cvCalvCovarmatrix()。对于我使用Matrix<Single>[]的第一个参数,我将其转换为IntPtr[]

Matrix<Single> avg = new Matrix<float>(7, 1);
Matrix<Single> cov = new Matrix<float>(7, 7);
Matrix<Single>[] input = new Matrix<float>[3];
for (int i = 0; i < 3; i++)
    input[i] = new Matrix<float>(7, 1);

IntPtr[] inObjs = Array.ConvertAll<Matrix<Single>, IntPtr>(input, delegate(Matrix<Single> mat) { return mat.Ptr; });

CvInvoke.cvCalcCovarMatrix(inObjs, 3, cov, avg, COVAR_METHOD.CV_COVAR_NORMAL);

但是现在我的输入是Image<Gray, Byte>[],每个图像大小(让我们假设)为7x7。我想在将每张图片更改为Matrix<float>之前,我需要先将每张图片转换为IntPtr[],尺寸为49x1。怎么做?

1 个答案:

答案 0 :(得分:0)

你是正确的方式。我在这里放了一些代码,这些代码也将作为其他代码的例子,因为那里没有emgucv协方差示例。

      Matrix<float> mat1 = new Matrix<float>(1, 3);
      mat1[0, 0] = 38;
      mat1[0, 1] = 55;
      mat1[0, 2] = 49;

      Matrix<float> mat2 = new Matrix<float>(1, 3);
      mat2[0, 0] = 43;
      mat2[0, 1] = 54;
      mat2[0, 2] = 4;

      Matrix<float> cov = new Matrix<float>(3, 3);

      Matrix<float> avg = new Matrix<float>(2, 1);

      Matrix<float>[] input = new Matrix<float>[2];
      input[0] = mat1;
      input[1] = mat2;          
      IntPtr[] inputPtrs = Array.ConvertAll<Matrix<Single>, IntPtr>(input, delegate(Matrix<Single> mat) { return mat.Ptr; });
      CvInvoke.cvCalcCovarMatrix(inputPtrs, 2, cov, avg, COVAR_METHOD.CV_COVAR_NORMAL);

我检查了针对computed wolfram ones的cov矩阵值,看起来没问题。

我最好的, 卢卡