使用OpenCv fisheye :: calibrate()函数时出现分段错误

时间:2015-07-03 16:41:03

标签: c++ opencv segmentation-fault camera-calibration

我使用OpenCv 2.4.10(C ++ API)中的fisheye :: calibrate()函数来校准鱼眼相机。当我使用针孔相机的标准cv :: calibrateCamera()函数时,一切正常。如果我使用fisheye对应物(即fisheye :: calibrate())和相同的输入(两个函数具有相同的签名),我会得到分段错误错误。 这是一个已知的问题?可能是什么问题?

1 个答案:

答案 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;

我希望能帮到那里的人!