美文网首页深度学习-推荐系统-CV-NLP我爱编程CV
利用pyrealsense获取深度图,并进行像素对齐

利用pyrealsense获取深度图,并进行像素对齐

作者: 龙黎_ | 来源:发表于2018-03-20 13:53 被阅读132次

    系统:Ubuntu16.04

    python版本:python2.7

    内核版本:4.13.0

    realsense SDK:librealsense1.12.1

    python wrapper:pyrealsense2.2

    这里的pyrealsense2.2指的是pyrealsense1的2.2版本,并不是pyrealsense2,如图:

    安装pyrealsense/2.2

    1. 进入github的pyrealsense地址,把pyrealsense的包下下来,解压到本地。

    2. 安装pycparser, CythonNumpy依赖

    sudo apt-get install pycparser

    sudo apt-get install Cython

    sudo apt-get install Numpy

    3. 通过setup.py安装pyrealsense

    python setup.py install


    ---获取深度图---

    import pyrealsense as rs

    import cv2

    import bumpy as np

    serv = rs.Service()

    dev = serv.Device()

    depth = dev.depth 

    depth = depth * dev.depth_scale * 1000

    depth = depth.astype(np.uint8)

    rgb = dev.color

    gray = cv2.cvtColor(rob,cv2.COLOR_BGR2GRAY)

    gray_depth = np.concatenate((gray,depth),axis=1)

    cv2.imshow('gray_depth',gray_depth)

    mix = cv2.addWeighted(gray,0.5,depth,0.5,0)

    cv2.imshow('mix',mix)

    以上代码的作用是,获取灰度图+深度图,然后融合两张图获取混合后的mix图,效果如下:


    ---问题分析---

    根据以上代码的运行结果,我们可以很直观的看到,获取的RGB图和深度图的坐标位置是不一样的。这是因为深度摄像头上不同摄像头存在空间位置的偏差导致的。

    首先什么是深度图

    深度图,它是灰度图像,该图像的每一个像素值都是摄像头到物体表面之间距离的估计值。

    那么,这样两张不对齐的RGB图和深度图,就做不到每个像素点之间的一一对应关系,也就没办法直接拿来用了,所以需要我们做像素对齐,把每个像素点一一对应起来,这样的数据才是有效的。


    ---像素对齐---

    关于像素对齐,官方其实给出了相关函数,只是pyrealsense1的examples中没有写出来,而pyrealsense2中的函数我们又没法用。所以当不确定到底有没有相关函数时,我们可以自己进行查找。

    通过dir(***),可以列出***底下所有的函数,如图:

    我们可以看到,dev底下有两个函数cad和dac

    cad:color align to depth #RGB图对齐到深度图,得到对齐后的RGB图

    dac:depth align to color #深度图对齐到RGB图,得到对齐后的深度图

    经测试后,cad图会有鱼眼的效果,导致图像存在黑边,而且还有一定比例的缩放,不利于操作。

    所以我这里选择了dac,让深度图主动对齐RGB图,而RGB的图像则由普通摄像头获取,代码如下:

    import pyrealsense as rs

    import cv2

    import numpy as np

    serv = rs.Service()

    dev = serv.Device()

    dac = dev.dac

    dac = dac * dev.depth_scale * 1000

    depth = dac.astype(np.uint8)

    rgb = dev.color

    gray = cv2.cvtColor(rob,cv2.COLOR_BGR2GRAY)

    gray_depth = np.concatenate((gray,depth),axis=1)

    cv2.imshow('gray_depth',gray_depth)

    mix = cv2.addWeighted(gray,0.5,depth,0.5,0)

    cv2.imshow('mix',mix)

    结果如下,通过mix图,可以很清晰地看到像素对齐以后的效果:

    相关文章

      网友评论

        本文标题:利用pyrealsense获取深度图,并进行像素对齐

        本文链接:https://www.haomeiwen.com/subject/rymvqftx.html