最近搞了好几天的计算视差,说麻烦也不麻烦,记录一下也让今后用得到的人做个借鉴。
我的计算视差用的是三角测量的方式,貌似现在都是这一种方式。得到物体距相机平面的距离也就是“Z”,大概有三种方式,第一种就是先生成深度图,之后点击深度图上的某一点,获取该点的像素值(此时图片应该是IPL_depth_16s的格式,三通道)cn[0]就表示深度。由于各种原因,我用了很多种算法的出来的深度图都很垃圾,一团一团的看不清楚,因此我就放弃了这种方法。
第二种方法和第三种方法思路是一样的,那就是不生成深度图,在左右两张图片上找同一个点,如果经过了对准,那么此时两张图片上的同一个点的纵坐标应该是相同的(相机左右摆放),因为存在视差,横坐标是不同的,两横坐标相减再通过三角测量,就可以求出距离。具体的三角测量公式可以看《Learning OpenCV》这本书,要注意的是焦距不是单独标定时的fx或fy,而是双目标定时得到的Q矩阵的Q[2][3],基线由Q[3][2]=-1/T求出。
现在介绍第二种方法,设置两个鼠标操作的回调函数,左图上点一下,得到坐标;右图上点一下,得到坐标(注意,一定要点的是真实世界中的同一点,尽量不要有误差),鼠标按下时读点,将横坐标写入文本,鼠标抬起时都取文本,在主函数内将读取的内容相减,就可以用三角