OpenCV应用相机失真 - 应用校准

时间:2015-11-04 15:23:42

标签: c++ opencv camera camera-calibration

我有一个程序可以检测实时视频流中的对象。我希望补偿相机中的失真,我使用了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();

1 个答案:

答案 0 :(得分:0)

  

未失真(currentFrame,resultsWindow,calibrationFile,notSure,   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的垫子,你已经充满了你的相机内在函数。 distCoeffs通常是包含扭曲系数的1x4或1x5 Mat。 (注意,必须在k2之后立即写入p1和p2。)