【问题标题】:Image/Camera calibration using custom pattern OpenCV使用自定义模式 OpenCV 进行图像/相机校准
【发布时间】:2019-10-25 09:05:46
【问题描述】:

我已经阅读了来自 OpenCV 的 this example 关于使用棋盘模板模式校准图像的内容。文章建议我可以使用另一种模式来校准功能:

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

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

是否有允许我这样做的 openCV(或任何其他库函数)?

【问题讨论】:

  • 您必须自己编写函数来检测模式。之后只需将这些点提供给 calibrateCamera 函数。
  • 你有什么参考资料可以用来制作模式检测功能吗?
  • 任何高精度的检测器都可以工作。通用检测器例如用于 QR 码、Aruco Marker、圆形、边缘、角落……
  • @JoshSharkey,你想检测什么样的模式?你能给我们举个例子吗?只要您可以将图像帧中点的坐标与世界中点的坐标匹配,相机校准就会起作用。您可以手动或自动完成(使用 OpenCV 给定的解决方案,或者您可以制作自己的模式检测器)。

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


【解决方案1】:

大部分工作已经在 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;
}

【讨论】:

猜你喜欢
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 2019-07-29
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
相关资源
最近更新 更多