В настоящее время я заблудился в документации OpenCV и ищу руководство по возможному упорядочению функций или, возможно, функции в OpenCV, к которой я еще не обращался …
Я отслеживаю лазерный шарик в камере, идущей к проекционному экрану. До сих пор я использовал findHomography и затем projectTransform для достижения этой цели, однако камера, которую я использовал, имела очень мало искажений. Сейчас я использую другую камеру с заметным радиальным искажением. Я использовал cvCalibrateCamera для получения коэффициентов искажения, матрицы камеры и т. Д., Но я не уверен, как мне следует использовать эти данные в моем текущем процессе, или, возможно, мне нужно использовать различные функции и / или упорядочение функций из OpenCV в целом. Мы ценим любые предложения…
Мой текущий код, который работает хорошо (без искажений), выглядит следующим образом:
Mat homog;
homog = findHomography(Mat(vCameraPoints), Mat(vTargetPoints), CV_RANSAC);
vector<Point2f> cvTrackPoint;
cvTrackPoint.push_back(Point2f(pMapPoint.fX, pMapPoint.fY));
Mat normalizedImageMat;
perspectiveTransform(Mat(cvTrackPoint), normalizedImageMat, homog);
Point2f normalizedImgPt;
normalizedImgPt = Point2f(normalizedImageMat.at<Point2f>(0,0));
normalizedImgPt.x /= szCameraSize.fWidth;
normalizedImgPt.y /= szCameraSize.fHeight;
Затем я, конечно, умножаю значение нормализованного изображения до разрешения моего проекционного экрана.
Итак, еще раз, просто чтобы уточнить … У меня есть то, что, как представляется, хорошие данные от calibrateCamera, как бы я использовал эту информацию для учета искажения объектива? Возможно, вышеописанный процесс не сработает, поможет?
Заранее спасибо
Если вы получили коэффициенты искажения, то простой (но, вероятно, неоптимальный) способ вернуться к неискаженному случаю состоит в том, чтобы не искажать изображение. Неискаженное изображение — это изображение, которое получит камера с аналогичными внутренними и внешними параметрами, но без искажения линзы.
Соответствующая функция OpenCV undistort
Других решений пока нет …