4

我正在尝试使用 OpenCv 来校正图像的失真,然后在给定像素坐标的情况下计算真实世界的坐标。我在网上或 OpenCv 书中找不到任何关于如何执行此操作的示例。

我已经用棋盘图像完成了相机校准。现在,我只需要一个基本函数,我可以为其提供像素坐标,它将根据相机矩阵、畸变系数、旋转和平移向量为我提供真实世界的坐标。

有谁知道如何做到这一点?

4

4 回答 4

7

看一下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_);

您可以在此处找到有关该功能的更多信息

于 2013-04-20T09:03:17.470 回答
1

正如我正确理解的那样,您需要一个来自图像点的世界点。对于单目相机,这个问题是无法解决的。您无法确定现实世界点到相机的深度(距离)。

有视觉同步定位和映射 (SLAM) 算法可以创建世界地图并根据视频计算相机的轨迹,但它们完全是另一回事。

于 2013-03-12T07:16:05.840 回答
1

给定单个图像和其上的一个点,以 2D 像素坐标表示,现实世界中有无数个 3D 点,它们都属于一条线,映射到您图像中的点……不仅仅是一个观点。

于 2013-04-18T19:13:35.127 回答
-1

但是,如果您知道对象到相机的像素 (x,y) 距离,那么您可以计算它在 3D 中的位置。

于 2011-05-19T17:12:29.423 回答