OpenCv C ++ перспективное преобразование - PullRequest
3 голосов
/ 16 мая 2011

Я пытаюсь использовать OpenCv, чтобы исправить изображение для искажения, а затем рассчитать координаты реального мира по координате пикселя.Я не могу найти какие-либо примеры в Интернете или в книге OpenCv о том, как это сделать.

Я сделал калибровку камеры с изображением шахматной доски.Теперь мне просто нужна базовая функция, которой я могу дать координаты пикселей, которая даст мне координаты реального мира, основанные на матрице камеры, коэффициентах искажения, векторах вращения и перемещения.

Кто-нибудь знает, как это сделать?

Ответы [ 4 ]

6 голосов
/ 20 апреля 2013

Посмотрите на функцию findHomography().Если вы знаете местоположение в реальном мире множества точек, вы можете использовать эту функцию для создания матрицы преобразования, которую вы можете использовать с функцией perspectiveTransform()

std::vector<Point2f> worldPoints;
std::vector<Point2f> cameraPoints;

//insert somepoints in both vectors

Mat perspectiveMat_= findHomography(cameraPoints, worldPoints, CV_RANSAC);

//use perspective transform to translate other points to real word coordinates

std::vector<Point2f> camera_corners;
//insert points from your camera image here

std::vector<Point2f> world_corners;
perspectiveTransform(camera_corners, world_corners, perspectiveMat_);

. Вы можете найти больше информации о функции. здесь

1 голос
/ 12 марта 2013

Как я правильно понимаю, вам нужна точка мира с точки изображения.С монокулярной камерой эта проблема неразрешима.Вы не можете определить глубину (расстояние) точки реального мира до камеры.

Существуют алгоритмы визуальной одновременной локализации и отображения (SLAM), которые создают карту мира и вычисляют траекторию движения камеры извидео, но это совсем другое.

0 голосов
/ 18 апреля 2013

Учитывая одно изображение и точку на нем, выраженную в виде координат 2D-пикселей, в реальном мире существует бесконечность 3D-точек, принадлежащих линии, которые отображаются в вашей точке на вашем изображении ... не только одно очко.

0 голосов
/ 19 мая 2011

Но, если вы знаете расстояние объекта в пикселях (x, y) от камеры, вы можете рассчитать его местоположение в 3D.

...