C# 如何转换图像<;灰色,字节>;进入一维矩阵<;浮动>;?

C# 如何转换图像<;灰色,字节>;进入一维矩阵<;浮动>;?,c#,image,matrix,emgucv,C#,Image,Matrix,Emgucv,我有一个大小为NxN的图像列车图像,我想将其更改为大小为(N^2)x1的1D矩阵trainMatrix 我试图做的是调用CvInvoke.cvCalvCovarmatrix()。对于第一个参数,我使用的是我转换为IntPtr[]的Matrix[] Matrix<Single> avg = new Matrix<float>(7, 1); Matrix<Single> cov = new Matrix<float>(7, 7); Matrix<

我有一个大小为NxN的
图像
列车图像,我想将其更改为大小为
(N^2)x1的1D
矩阵
trainMatrix

我试图做的是调用
CvInvoke.cvCalvCovarmatrix()
。对于第一个参数,我使用的是我转换为
IntPtr[]
Matrix[]

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);
Matrix avg=新矩阵(7,1);
矩阵cov=新矩阵(7,7);
矩阵[]输入=新矩阵[3];
对于(int i=0;i<3;i++)
输入[i]=新矩阵(7,1);
IntPtr[]inObjs=Array.ConvertAll(输入,委托(矩阵mat){return mat.Ptr;});
CvInvoke.cvCalcCovarMatrix(inObjs,3,cov,avg,COVAR_方法,CV_COVAR_NORMAL);

但现在我有了
Image[]
输入,每个图像大小(假设)为7x7。我想我需要先将每个图像转换为大小为49x1的
矩阵
,然后再将其转换为
IntPtr[]
。怎么做?

你走的路是对的。我在这里放了一些代码,也可以作为其他代码的示例,因为这里没有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);
矩阵mat1=新矩阵(1,3);
mat1[0,0]=38;
mat1[0,1]=55;
mat1[0,2]=49;
矩阵mat2=新矩阵(1,3);
mat2[0,0]=43;
mat2[0,1]=54;
mat2[0,2]=4;
矩阵cov=新矩阵(3,3);
矩阵平均值=新矩阵(2,1);
矩阵[]输入=新矩阵[2];
输入[0]=mat1;
输入[1]=mat2;
IntPtr[]inputPtrs=Array.ConvertAll(输入,委托(矩阵mat){return mat.Ptr;});
CvInvoke.cvCalcCovarMatrix(输入ptrs,2,cov,avg,COVAR_方法,CV_COVAR_NORMAL);
我对照cov矩阵值检查了cov矩阵值,它们似乎没有问题

尽我最大的努力,
卢卡

你是说2D矩阵吗?因为一维矩阵是一个向量。哦,是的,向量,但类型是矩阵,这就是为什么矩阵有N^2行,只有1列。你可以检查它是关于三维数组的,但在我看来非常相似。但是在这个问题上,2D的解已经给出了。所以你想要的是一个有1行或1列的图像,对吗?你能提供一些代码吗。因为我不知道图像到底是什么(简单灰度矩阵?),我已经编辑了这个问题。图像来自emguCV,我不知道它是否是一个简单的灰度矩阵。