크기가 NxN 인 Image<Gray, Byte>
trainImage가 있는데, (N^2)x1
크기의 1D Matrix<float>
trainMatrix로 변경하고 싶습니다.이미지 <Gray, Byte>을 1D 매트릭스 <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>[]
인 입력이 7 × 7 (의 가정하자)를. 나는 IntPtr[]
으로 변경하기 전에 각 이미지를 크기 49x1 인 Matrix<float>
으로 먼저 변환해야한다고 생각합니다. 그것을하는 방법?
2D 매트릭스입니까? 왜냐하면 1D 행렬은 벡터입니다. –
오 예, 벡터입니다. 그러나 형식이 행렬이므로 행렬에 N^2 행과 열만 있습니다. – maru1414152
[이 질문] (http://stackoverflow.com/questions/7367770/how-to-flatten-or-index-3d-array-in-1d-array)에서 확인할 수 있습니다. 약 3d 배열이지만 매우 비슷합니다. IMO. 그러나 문제는 2D에 대한 해결책이 이미 주어 졌다는 것입니다. –