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_);
4 回答
看一下
findHomography()
函数 . 如果您知道现实世界中一组点的位置,您可以使用此函数创建转换矩阵,您可以使用函数perspectiveTransform()
您可以找到有关该功能的更多信息here
据我所知,你需要一个从图像点开始的世界点 . 使用单目相机这个问题是无法解决的 . 您无法确定相机的真实世界点的深度(距离) .
有视觉同时定位和映射(SLAM)算法,可以创建世界 Map 并根据视频计算摄像机的轨迹,但它们是另一回事 .
给定单个图像及其上的点(以2D像素坐标表示),现实世界中存在无限的3D点,所有3D点都属于一条线,它映射到您图像中的点...不只是一个点 .
但是,如果您知道物体在像素(x,y)中与相机的距离,那么您可以在3D中计算其位置 .