C++ OpenCv C++;透视变换
我试图使用OpenCv来纠正图像的失真,然后在给定像素坐标的情况下计算真实世界的坐标。我在网上或OpenCv书中找不到任何关于如何做到这一点的例子 我已经用棋盘图像做了摄像机校准。现在,我只需要一个基本函数,我可以给像素坐标,它会给我真实世界的坐标,基于摄像机矩阵,畸变系数,旋转和平移向量C++ OpenCv C++;透视变换,c++,opencv,camera,camera-calibration,C++,Opencv,Camera,Camera Calibration,我试图使用OpenCv来纠正图像的失真,然后在给定像素坐标的情况下计算真实世界的坐标。我在网上或OpenCv书中找不到任何关于如何做到这一点的例子 我已经用棋盘图像做了摄像机校准。现在,我只需要一个基本函数,我可以给像素坐标,它会给我真实世界的坐标,基于摄像机矩阵,畸变系数,旋转和平移向量 有人知道怎么做吗?但是,如果你知道物体距离相机的像素(x,y)距离,那么你可以在3D中计算它的位置。正如我正确理解的那样,你需要从图像点算起一个世界点。用单目照相机这个问题是无法解决的。无法确定真实世界点到摄
有人知道怎么做吗?但是,如果你知道物体距离相机的像素(x,y)距离,那么你可以在3D中计算它的位置。正如我正确理解的那样,你需要从图像点算起一个世界点。用单目照相机这个问题是无法解决的。无法确定真实世界点到摄影机的深度(距离)
有一些视觉同步定位和映射(SLAM)算法可以创建世界地图并从视频中计算摄像机的轨迹,但它们完全是另一回事。给定单个图像和图像上的一个点,用2D像素坐标表示,现实世界中有无限多的3D点,都属于一条线,它映射到图像中的点。。。不仅仅是一点。看看
findHomography()
函数。如果您知道一组点在现实世界中的位置,则可以使用此函数创建变换矩阵,该矩阵可用于函数perspectiveTransform()
std::向量世界点;
std::矢量相机点;
//在两个向量中插入一些点
Mat透视图Mat=findHomography(摄影点、世界点、CV_RANSAC);
//使用透视变换将其他点转换为实际单词坐标
std::矢量摄像机;
//在此处插入相机图像中的点
矢量世界角;
透视变换(摄影机角、世界角、透视图);
您可以找到有关投影到棋盘平面的函数的更多信息,请参见。@dilip_thomas如何找到真实世界的点?我需要知道这一点才能将其传递给findHomography函数。
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_);