CvMat學習(1)

運行如下這段代碼:

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構造函數沒有進行相應的類型轉換。這是特別需要注意的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章