OpenCv C ++透视变换

OpenCv C++ Perspective Transform

我正在尝试使用opencv来校正图像的失真,然后在给定像素坐标的情况下计算真实世界的坐标。我在网上或在OpenCV手册中找不到任何这样做的例子。

我已经用棋盘图像进行了相机校准。现在,我只需要一个基本的函数,我可以给像素坐标,它将给我基于摄像机矩阵,失真系数,旋转和平移向量的真实世界坐标。

有人知道怎么做吗?


带看在findHomography()功能。如果你知道的位置在真实世界的设定点的,你可以使用这个功能来创建变换矩阵,你可以使用与功能perspectiveTransform() P / < >

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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_);

你可以找到更多的信息关于睾丸功能 P / < >


我明白你需要的correctly世界点从图像的点。与monocular相机这个问题也unsolvable。你不确定的depth(距离)的真实世界的点到相机。 P / < >

有视觉simultaneous localization和mapping(SLAM)算法,创建一个地图的游戏世界和compute的trajectory英语,从相机的视频,但他们是在整个其他的事情。 P / < >


在单一的图像的点和在它,会表示,在词汇表中的二维像素coordinates,有一个无限的三维点在现实世界中,所有的belonging到线的地图,这是给你点在你的图像。不只是一个点。 P / < >


但是,如果你知道的距离的对象在像素(x,y),然后你可以从相机calculate ITS的位置在三维。 P / < >