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。但在這個問題上,已經給出了二維解決方案。 –