1
這是怎麼了應該做的,如果我嘗試簡單的代碼,它的工作原理:OpenCV的2.3席訪問單信道矩陣元素
Mat a= Mat(4,3, CV_32FC1);
float elem_a= a.at<float>(i,j);
但做一些數學後,該代碼給出撥錯結果
Mat intrinsics(3, 3, CV_32FC1);
Mat distortion(5, 1, CV_32FC1);
fs["camera_matrix"] >> intrinsics; //3*3
fs["distortion_coefficients"] >> distortion; //5*1
Mat rvec(1, 3, CV_32FC1);
Mat tvec(1, 3, CV_32FC1);
Mat R(3, 3, CV_32FC1);
Mat A(3, 3, CV_32FC1);
solvePnP(Mat(objectPoints), Mat(imagePoints), intrinsics, distortion, rvec, tvec, false);
Rodrigues(rvec, R);
A = intrinsics * R;
cout << "A = " << A << endl;
cout << "A[0] = " << A.at<float>(0,0) << "A[1] = " << A.at<float>(0,1) << endl;
輸出:
A =
[-123.6820813196553, 792.0751394843999, -359.9404307669494;
668.8426426360758, -15.08087511838299, -513.8498143647524;
-0.3389607187919322, -0.03644067597638417, -0.9400945209128925]
A[0] = 4.12987e+09 A[1] = -3.48313
我到底做錯了什麼? Ty
什麼(*(float *)(A.data))打印出來? – Boaz 2012-01-14 14:09:40
關於Rodrigues()之後的R數據類型的文檔是什麼? – Sam 2012-01-14 17:24:54
@ Boaz.Jan cout <<((float)(A.data))<< endl;在編譯時發生錯誤「錯誤:從類型'uchar * {aka unsigned char *}'無效轉換爲鍵入'float'」... docs不說任何內容http://opencv.itseez.com/modules/calib3d/doc /camera_calibration_and_3d_reconstruction.html?highlight=extrinsic#void%20Rodrigues(InputArray%20src,%20OutputArray%20dst,%20OutputArray%20jacobian) – notphunny 2012-01-15 13:07:56