0
我有一个Image<Gray, Byte>
trainImage的大小为NxN,我想将其更改为1D Matrix<float>
trainMatrix,大小为(N^2)x1
。如何把Image <Gray, Byte>转换成1D Matrix <float>?
我想要做的是致电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[]
。怎么做?
你的意思是2D矩阵?因为一维矩阵是一个向量。 –
哦,是的,一个向量,但类型是矩阵,这就是为什么矩阵有N^2行,只有1列。 – maru1414152
你可以检查[这个问题](http://stackoverflow.com/questions/7367770/how-to-flatten-or-index-3d-array-in-1d-array)它是关于3D数组,但它非常相似IMO。但在这个问题上,已经给出了二维解决方案。 –