我使用OpenCv 2.4.10(C ++ API)中的fisheye :: calibrate()函数来校准鱼眼相机。当我使用针孔相机的标准cv :: calibrateCamera()函数时,一切正常。如果我使用fisheye对应物(即fisheye :: calibrate())和相同的输入(两个函数具有相同的签名),我会得到分段错误错误。 这是一个已知的问题?可能是什么问题?
答案 0 :(得分:1)
看来它已经提交了一段时间了,但是当我偶然发现这个试图解决同样的问题时,我会把我在这里找到的解决方案用来帮助那些接下来的人。
看起来此函数存在错误,这意味着它无法处理输入和输出数组的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;
我希望能帮到那里的人!