立体匹配OpenCV源码使用讲解
代码思路
其实立体匹配很容易使用,因为他的步骤很少,难的原理部分你也写不来,所以直接调用sgbm就可以了。官方源码里首先是读入矩阵参数,求出对应的图片矫正映射矩阵,然后重映射矫正图像。这一步其实在之前摄像机标定的程序中也可以直接得到,如果把那里的矫正后的图直接拿来用就可以省去矫正的步骤。之后是sgbm的参数设置,也是我们主要调整效果的地方。再用sgbm求出对应的视差图,最后用一个函数由视差图求得三维坐标,即点云数据。
代码详解
print_help没啥可说
28-42行代码是将输出的三维点云筛选之后写入point_3D.jpg文件,但个人建议把输出文件改成"point3D.txt",这样之后可以从中查看点云坐标和查看点云。
46-99是对sgbm的相关变量进行赋值操作,自己写的话可以不按源码的写法,直接赋值就可以了。
100-173就是判断所需要的文件是否存在,自己写代码的话可以不用写上。
174-216就是和之前相机标定效果一样,读入矩阵参数后求出矫正映射矩阵,再对输入进来的图像进行矫正。这里你可以在之前相机标定时输出矫正后的图像,这里再读进来直接用就好了(直接赋给img1和img2)。
220-253对sgbm算法的参数设置,十分重要,之后会详细讲各个参数的意义。
剩下的部分就是输出三维坐标文件和视差图了。
详细注释会在最后给出
参数解释
sgbm的使用中最重要的就是参数的设置,也是我们唯一能改的地方。