calibrateCamera opencv功能不起作用

时间:2014-08-20 09:48:07

标签: c++ opencv camera-calibration

我正在校准我的相机,以执行图像的不失真。 为了达到这个目标,我正在使用OpenCV库的校准摄像头功能。 所以我使用棋盘来获取真实参考系统中的点以提取点数。然后我将这些点转换为mm的真实参考系。所以在最后我得到两个点向量:棋盘交叉点的向量和以mm为单位的点向量。

最后我尝试使用calibrateCamera功能校准相机,以获取我的校准参数。 校准摄像机功能定义如下:

calibrateCamera(pointsmm,points,Size(640,480),cameraMatrix,distCoeffs,rvec,tvec );  

其中points和poinstmm定义如下:

vector<vector<Point2f>> points;
vector<vector<Point3f>> pointsmm;

和cameraMatrix,distCoeff,rvec,tvec as

vector <float>

矢量点的获得如下:

    vector <Point2f> temp;
    bool found = findChessboardCorners(md1,Size(nx,ny),temp);
    if (found){
        //cornerSubPix( md1_g, temp, Size(11,11), Size(-1,-1), TermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 30, 0.1 )); //(peggiora)
        points.push_back(temp); 
        vector<Point3f> temp2;
        for( int i = 0; i < ny; i++ )
            for( int j = 0; j < nx; j++ )
                temp2.push_back(Point3f(float((2*j + i % 2)*squaresize), float(i*squaresize), 220));
        pointsmm.push_back(temp2);
    }
    //nx and ny are the size of the image
    cv::drawChessboardCorners(md1, Size(nx,ny), Mat(temp), found);

对于我所拥有的所有采集重复此操作,因此点和点的大小mm对应于采集的数量。虽然向量的每个元素的大小对应于棋盘的预期大小。

我画的棋盘没问题,积分对应。另外我检查了pointsmm和points的大小相同。

当我在执行中调用校准功能时,我收到以下错误: 在BridgeLibrary.dll中的“System.Runtime.InteropServices.SEHException”中未管理异常 外部组件引发的异常。 当调用calibrateCamera函数时,调试软件会引发异常。

我正在使用CLI / C ++将wpf与c ++联系起来。 我认为问题取决于我如何调用calibrateCamera函数。 我还尝试将向量rvec和tvec定义为向量,但它不起作用。 我使用的是OpenCV 2.19版。

1 个答案:

答案 0 :(得分:1)

你使用了正确的技巧..

我使用相同的方法在我的项目中为固定模式校准相机。

使用此链接获取更多帮助:

http://docs.opencv.org/doc/tutorials/calib3d/camera_calibration_square_chess/camera_calibration_square_chess.html