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

本文介绍了使用三角测量法计算视差的方法,通过不生成深度图,而在左右图像中找到相同点来求解物体距离。详细步骤包括设置鼠标回调函数获取点坐标,以及对棋盘格角点的自动检测,最终实现自动化计算视差。
最低0.47元/天 解锁文章
6556

被折叠的 条评论
为什么被折叠?



