diff --git a/modules/calib3d/src/fisheye.cpp b/modules/calib3d/src/fisheye.cpp index 3d737e7f4..8e3e20ece 100644 --- a/modules/calib3d/src/fisheye.cpp +++ b/modules/calib3d/src/fisheye.cpp @@ -794,13 +794,22 @@ double cv::fisheye::calibrate(InputArrayOfArrays objectPoints, InputArrayOfArray if (K.needed()) cv::Mat(_K).convertTo(K, K.empty() ? CV_64FC1 : K.type()); if (D.needed()) cv::Mat(finalParam.k).convertTo(D, D.empty() ? CV_64FC1 : D.type()); - if (rvecs.kind()==_InputArray::STD_VECTOR_MAT) + if (rvecs.isMatVector()) { - int i; - for( i = 0; i < (int)objectPoints.total(); i++ ) + int N = (int)objectPoints.total(); + + if(rvecs.empty()) + rvecs.create(N, 1, CV_64FC3); + + if(tvecs.empty()) + tvecs.create(N, 1, CV_64FC3); + + for(int i = 0; i < N; i++ ) { - rvecs.getMat(i)=omc[i]; - tvecs.getMat(i)=Tc[i]; + rvecs.create(3, 1, CV_64F, i, true); + tvecs.create(3, 1, CV_64F, i, true); + memcpy(rvecs.getMat(i).ptr(), omc[i].val, sizeof(Vec3d)); + memcpy(tvecs.getMat(i).ptr(), Tc[i].val, sizeof(Vec3d)); } } else