深度学习-推荐系统-CV-NLP我爱编程CV

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

2018-03-20  本文已影响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图,可以很清晰地看到像素对齐以后的效果:

上一篇下一篇

猜你喜欢

热点阅读