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

OpenCV apply camera distortion - apply calibration

本文关键字:应用 失真 相机 OpenCV      更新时间:2023-10-16

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

无失真(currentFrame,resultsWindow,calibrationFile,notSure,notSure);

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

2.4.x的无侵权文件如下:http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#undistort

典型地,src是包含当前帧的Mat。CCD_ 6是将用未失真图像填充的相同大小的输出CCD_。您必须将其转换回您喜欢的格式或在窗口中显示。cameraMatrix是一个3x3的垫子,你已经装满了你的相机内部。CCD_ 9通常是包含失真系数的1x4或1x5 CCD_。(注意,p1和p2必须写在k2之后)。