【发布时间】:2012-09-11 08:47:35
【问题描述】:
我有一个大小为 NxN 的 Image<Gray, Byte> trainImage,我想将其更改为大小为 (N^2)x1 的一维 Matrix<float> 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。我想我需要先将每个图像转换为大小为 49x1 的Matrix<float>,然后再将其更改为IntPtr[]。怎么做?
【问题讨论】:
-
你的意思是二维矩阵吗?因为一维矩阵是一个向量。
-
哦,是的,一个向量,但类型是矩阵,这就是为什么矩阵有 N^2 行只有 1 列。
-
您可以查看this question 它是关于 3d 数组,但它与 IMO 非常相似。但是在问题中已经给出了 2D 的解决方案。
-
所以你想要的是一张 1 行或 1 列的图像,对吧?你能提供一些代码吗?因为我不知道 Image
到底是什么(Simple GrayscaleMatrix?)。 -
我已经编辑了这个问题。 Image
来自 emguCV,不知道是不是简单的灰度矩阵。