c++ - calibrateCamera opencv 功能不起作用

标签 c++ opencv camera-calibration

我正在校准我的相机,以消除图像失真。 为了实现这个目标,我正在使用 OpenCV 库的校准相机功能。 所以我用棋盘在真实引用系统中取点来提取点数。然后我用mm将这些点转换成真实的引用系。所以最后我得到两个点 vector :棋盘交叉点的 vector 和以毫米为单位的点 vector 。

最后我尝试使用 calibrateCamera 函数校准相机,以获得我的校准参数。 相机标定函数定义如下:

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

其中 points 和 pointstmm 定义如下:

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

和cameraMatrix, distCoeff, rvec, tvec as

vector <float>

.

vector 点的获取方式如下:

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

对我拥有的所有采集重复此操作,因此点和点的大小与采集的数量相对应。而 vector 中每个元素的大小对应于棋盘的预期大小。

我画的棋盘还可以,点数对应。此外,我检查了 pointsmm 和 points 具有相同的大小。

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

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

最佳答案

你使用了正确的技巧..

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

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

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

关于c++ - calibrateCamera opencv 功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25401628/

相关文章:

OpenCV:移动单相机的旋转矩阵和平移向量

c++ - 部分发送/接收 TCP 套接字 c++

c++ - C3857 不允许使用多个类型参数列表编译器错误

c++ - MSVC 中的地址清理程序 : why does it report an error on startup?

python - 尝试从多个帧创建视频

c++ - 初始化完成 opengl 支持可用

opencv - cv2.projectPoints 实际上是如何工作的?

c# - 读取 DTD 或 Schema 并列出给定元素的所有有效子元素或属性

ios - 使用 GPUImage 从黑白滤镜中去除阴影

opencv - 使用 opencv 最小化方程