1
이것은 수행되는 방법이며, 내가 간단한 코드를하려고하면 그것은 작동 :OpenCV의 2.3 매트에 액세스하는 단일 채널 행렬 요소는
Mat a= Mat(4,3, CV_32FC1);
float elem_a= a.at<float>(i,j);
몇 가지 계산을 수행 한 후,이 코드는 worng 결과
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
로드 리 게스 (Rodrigues()) 이후 R의 데이터 유형에 관한 문서는 무엇입니까? – Sam
@ Boaz.Jan cout << ((float) (A.data)) << endl; 컴파일시 오류가 발생합니다. "오류 : 유형 'uchar * {aka unsigned char *}'에서 'float'을 입력 할 때 잘못된 형식으로 캐스팅되었습니다."... docs are nothing anything http://opencv.itseez.com/modules/calib3d/doc /camera_calibration_and_3d_reconstruction.html?highlight=extrinsic#void%20Rodrigues(InputArray%20src,%20OutputArray%20dst,%20OutputArray%20jacobian) – notphunny