我正在使用OpenCv 2.4.10(C++API(中的鱼眼::calibrate((函数来校准鱼眼相机。当我为针孔相机使用标准的cv::calibrateCamera((函数时,一切都正常。如果我使用具有相同输入(两个函数具有相同签名(的鱼眼对应物(即鱼眼::calibrate(((,我会得到分段错误。这是一个已知的问题吗?可能是什么问题?
这看起来已经有一段时间没有提交了,但当我在试图解决同一问题时偶然发现这一点时,我将把我找到的解决方案放在这里,以帮助后面的人。
这个函数似乎有一个错误,这意味着它无法处理输入和输出数组的Mat参数。当我使用以下签名时,它开始工作。
double cv::fisheye::calibrate (vector<vector<Point3f> > objectPoints, vector<vector<Point2f> > imagePoints, const Size &image_size, Matx33d K, Vec4d D, vector<Vec3d> rvecs, vector<Vec3d> tvecs, int flags=0, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 100, DBL_EPSILON))
值得庆幸的是,Mat类型有一些很好的转换方法,所以在我的情况下(无论如何,我已经有了正确格式的imagePoints(,我只能做到:
distCoeffs = Mat::zeros(4, 1, CV_64F);
Matx33d tempCameraMatrix = cameraMatrix;
Vec4d tempDistCoeffs = distCoeffs;
我希望这能帮助到外面的人!