calibrateCamera opencv函数不起作用

calibrateCamera opencv function does not work

本文关键字:不起作用 函数 opencv calibrateCamera      更新时间:2023-10-16

我正在校准我的相机,以执行图像的不失真。为了实现这个目标,我使用了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为

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);

这个操作对我所有的采集重复,所以点的大小和pointsmm,与采集的数量相对应。而向量的每个元素的大小对应于棋盘的预期大小。

我画的棋盘是ok的,点数对应。另外,我检查了pointsmm和points具有相同的大小。

当我在执行中调用校准函数时,我得到以下错误:在System.Runtime.InteropServices中没有管理异常。在BridgeLibrary.dll中的SEHException'外部组件抛出异常。调试软件,当我调用calibrateCamera函数时抛出异常。

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

你用对了…

在我的项目中,我用同样的方法来校准相机的固定模式。

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

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