【问题标题】:OpenCV apply camera distortion - apply calibrationOpenCV 应用相机失真 - 应用校准
【发布时间】:2016-02-05 04:01:01
【问题描述】:

我有一个程序可以检测实时视频流中的对象。我正在寻找补偿相机失真的方法,我使用了 OpenCV 校准工具并生成了一个带有相关参数的 XML 文件。

但是我不确定如何使用 undistort 函数应用此功能,我的理解是在捕获每个帧时需要将其应用到每个帧?

void undistort(InputArray src, OutputArray dst, InputArray cameraMatrix, InputArray distCoeffs, InputArray newCameraMatrix=noArray() )

我无法识别这些参数中的每一个,以下是我目前的理解。

undistorted(currentFrame, resultsWindow, calibrationFile, notSure, notSure);

这个函数的调用方式如下:

  if(captureOpen == false){
    img_scene = cvCaptureFromFile(videoFeed);
  }
  while(1) {
    image = cvQueryFrame(img_scene);
    undistort();

【问题讨论】:

标签: c++ opencv camera camera-calibration


【解决方案1】:

不失真(currentFrame,resultsWindow,calibrationFile,notSure, 不确定);

不,那行不通。您需要事先手动读取您的 XML 文件,并使用文件中找到的数据填充相应的参数。该文件应包含相机矩阵(查找 cx、cy、fx、fy 值)和失真参数(k1、k2、k3、p1、p2 等)。

2.4.x 的 undistort 文档在这里:http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#undistort

通常src 是一个包含当前帧的Matdst 输出 Mat 的大小相同,将填充未失真的图像。您必须将其转换回您的首选格式或将其显示在窗口中。 cameraMatrix 是一个 3x3 的 Mat,你已经用你的相机内在函数填充了。 distCoeffs 通常是包含失真系数的 1x4 或 1x5 Mat。 (注意 p1 和 p2 必须写在 k2 之后)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-11
    • 2012-04-26
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2014-10-23
    • 1970-01-01
    相关资源
    最近更新 更多