Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCv C++;透视变换_C++_Opencv_Camera_Camera Calibration - Fatal编程技术网

C++ OpenCv C++;透视变换

C++ OpenCv C++;透视变换,c++,opencv,camera,camera-calibration,C++,Opencv,Camera,Camera Calibration,我试图使用OpenCv来纠正图像的失真,然后在给定像素坐标的情况下计算真实世界的坐标。我在网上或OpenCv书中找不到任何关于如何做到这一点的例子 我已经用棋盘图像做了摄像机校准。现在,我只需要一个基本函数,我可以给像素坐标,它会给我真实世界的坐标,基于摄像机矩阵,畸变系数,旋转和平移向量 有人知道怎么做吗?但是,如果你知道物体距离相机的像素(x,y)距离,那么你可以在3D中计算它的位置。正如我正确理解的那样,你需要从图像点算起一个世界点。用单目照相机这个问题是无法解决的。无法确定真实世界点到摄

我试图使用OpenCv来纠正图像的失真,然后在给定像素坐标的情况下计算真实世界的坐标。我在网上或OpenCv书中找不到任何关于如何做到这一点的例子

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


有人知道怎么做吗?

但是,如果你知道物体距离相机的像素(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_);