OpenCV применить искажение камеры - применить калибровку

У меня есть программа, которая обнаруживает объекты в потоке живого видео. Я пытаюсь компенсировать искажения в камере, я использовал инструмент калибровки 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 ответ

неискаженный (currentFrame, resultsWindow, калибровочный файл, 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

типично src это Mat содержащий текущий кадр. dst выход Mat того же размера, который будет заполнен неискаженным изображением. Вам придется преобразовать это обратно в ваш предпочитаемый формат или отобразить его в окне. cameraMatrix это коврик 3х3, который вы заполнили своей камерой. distCoeffs обычно 1x4 или 1x5 Mat содержащие коэффициенты искажения. (Обратите внимание, что p1 и p2 должны быть записаны сразу после k2).

Другие вопросы по тегам