運行如下這段代碼:
double arr[] = { 1.0, 2.0, 3.0,
4.0, 5.0, 6.0,
7.0, 8.0, 9.0,
10.0,11.0,12.0};
CvMat mat1 = cvMat(4, 3, CV_64FC1, arr),
mat2 = cvMat(3, 4, CV_32FC1, arr),
mat3 = cvMat(4, 1, CV_32FC3, arr);
float *elem = (float*)cvPtr2D(&mat2, 1, 1);//返回錯誤結果。
F5調試觀察,發現儘管mat1, mat2, mat3都按照計劃生成完畢,其中的step分別爲24, 16, 16,但是cvPtr2D返回的結果卻只有mat1是正確的。並且*(float*)(mat2.data.ptr + 8)的結果居然是2.000000000!這說明儘管mat2是按照CV_32FC1的數據類型生成的矩陣,但其data的格式仍然是double。換言之,cvMat構造函數沒有進行相應的類型轉換。這是特別需要注意的