【问题标题】:Stereo Calibration using OpenCV C++使用 OpenCV C++ 进行立体校准
【发布时间】:2015-11-11 06:27:39
【问题描述】:

我是 OpenCV 的初学者。我想使用 opencv 校准立体相机。我有两个 9x6 的 USB 网络摄像头和棋盘图案。我已经阅读了立体视觉校准的教程以及opencv中的calibration.cpp示例。

我从两个相机中单击了大约 20 张图像并将其存储在一个文件夹中。此外,我制作了一个文本文件,其中包含来自 Martin Paris 教程的每个图像的位置。

我的问题是? 1. 如何调用每张图片进行角点检测? 2. 按照方法 - 校准每个相机然后进行 StereoCalibration ?

我真的被困住了。 任何帮助将不胜感激。!

【问题讨论】:

    标签: opencv


    【解决方案1】:

    对于您的第一个问题,在这种情况下,您需要分别找到每个图像的角。例如:

    found1 = findChessboardCorners(img1, board_sz, corners1, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS);
    found2 = findChessboardCorners(img2, board_sz, corners2, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS);
    

    其中 board_sz 是棋盘的大小,corners1 是图像 1 中棋盘的角,图像 2 也是如此(有关更多详细信息,请参阅 openCV 参考:http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#findchessboardcorners

    对于第二个问题,您不应单独校准每个相机。 stereoCalibrate 为您完成工作并存储内部参数(cameraMatrix1、distCoeffs1 用于 camera1 和 cameraMatrix2、distCoeffs2 用于 camera2)和外部参数(R、T、E、F,它们是旋转、平移、基本矩阵和基本矩阵):

    double stereoCalibrate(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputOutputArray cameraMatrix1, InputOutputArray distCoeffs1, InputOutputArray cameraMatrix2, InputOutputArray distCoeffs2, Size imageSize, OutputArray R, OutputArray T, OutputArray E, OutputArray F, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 1e-6), int flags=CALIB_FIX_INTRINSIC 
    

    请注意,内在参数和外在参数是输入/输出。

    这里的 imagePoints1 和 imagePoints2 是一个角点列表,因为你需要拍几张不同姿势的棋盘照片。所以,你会做这样的事情(对于每张图片):

    if (found1 && found2)
    {
        imagePoints1.push_back(corners1);
        imagePoints2.push_back(corners2);
        objectPoints.push_back(obj);
        printf ("Corners stored\n");
        success++;
    }
    

    如果您需要更多详细信息,请参阅此帖子:http://www.jayrambhia.com/blog/stereo-calibration/

    【讨论】:

    • 这个答案不仅错误,而且很危险!引用具体文档,“但是,由于参数空间的高维和输入数据中的噪声,该函数可能会偏离正确的解决方案。如果可以为每个相机单独高精度估计内在参数(例如,使用 calibrateCamera ),建议您这样做,然后将 CALIB_FIX_INTRINSIC 标志与计算的内在参数一起传递给函数。“请参阅docs.opencv.org/3.3.1/d9/d0c/…
    • 答案中的最后一个链接已失效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2017-10-18
    • 1970-01-01
    • 2021-02-13
    • 2017-05-22
    • 2014-07-30
    相关资源
    最近更新 更多