我已经从“学习OpenCV”一书中听过立体声实现。我有基本的,必要的,旋转,平移矩阵,我如何计算我点击的对象的真实世界位置?
答案 0 :(得分:1)
您可以使用ReprojectTo3D
。
reprojectImageto3D函数需要视差图,图像和图像相同大小的输出数组。数组Q(视差 - 深度图)。
Q由stereoRectify函数计算 - > stereoRectify需要内在的相机矩阵,失真系数和相对旋转&两个摄像机之间的平移向量(R& T)。
要计算所有这些,请使用输出所有这些的stereoCalibrate函数。 http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html - 这是我提到的所有功能的链接。
因此,编码顺序的步骤是:
1> stereoCalibrate(现在使用来自同一相机的2个视图):得到失真系数,两个相机的固有矩阵和R& T.(你已经完成了)。
2 - ;计算视差并存储图像 - 使用此处显示的视差计算(3d reconstruction from 2 images without info about the camera)来了解预期哪种输入是第一个& reprojectImageto3D的第二个参数。
3>使用stereoRectify来获得Q。
4>将所有值插入reprojectImage to 3D以生成coords。输出数组_3dImage中的每个条目,即在每个像素,我们将有3个值存储在一起:对应于像素的x,y坐标和从Q计算的z坐标。这个z坐标基本上就是我们想要的。
计算视差图并使用Q获取_3dImage后,(i, j)
的每个_3dImage
都会有(x, y, z)
个值。我甚至将它移植到PCL来观看3D图像,这就是它的外观。
这就是Disparity Map的样子
这是使用PCL的相应3D视图