使用自定义模式OpenCV进行图像/相机校准

时间:2019-06-11 01:22:47

标签: python opencv image-processing image-manipulation camera-calibration

我已从OpenCV阅读this example,内容涉及使用棋board的模板图案校准图像。本文建议我可以使用另一种模式来校准该函数:

  

对于立体声应用,首先需要纠正这些失真。为了找到所有这些参数,我们要做的是提供一些定义良好的图案的示例图像(例如,国际象棋棋盘)。我们在其中找到了一些特定点(棋盘上的四角)。我们知道它在现实空间中的坐标,我们知道它在图像中的坐标。利用这些数据,可以在后台解决一些数学问题,以获得失真系数。那就是整个故事的摘要。为了获得更好的结果,我们至少需要10个测试模式。

,但没有详细说明如何执行此操作。

是否有允许我执行的openCV(或任何其他库函数)?

1 个答案:

答案 0 :(得分:0)

大部分工作已在OpenCV示例中实现,例如

https://github.com/opencv/opencv/blob/master/samples/cpp/calibration.cpp

内部,您可以直接选择要使用的模式

"Usage: calibration\n"
        "     -w=<board_width>         # the number of inner corners per one of board dimension\n"
        "     -h=<board_height>        # the number of inner corners per another board dimension\n"
        "     [-pt=<pattern>]          # the type of pattern: chessboard or circles' grid\n"

调用此脚本时,只需传递参数 -pt = circles

如果您自己实施,选择起来也很容易

bool found;
switch( pattern )
{
    case CHESSBOARD:
        found = findChessboardCorners( view, boardSize, pointbuf,
            CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_FAST_CHECK | CALIB_CB_NORMALIZE_IMAGE);
        break;
    case CIRCLES_GRID:
        found = findCirclesGrid( view, boardSize, pointbuf );
        break;
    case ASYMMETRIC_CIRCLES_GRID:
        found = findCirclesGrid( view, boardSize, pointbuf, CALIB_CB_ASYMMETRIC_GRID );
        break;
    default:
        return fprintf( stderr, "Unknown pattern type\n" ), -1;
}