系统: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, Cython,Numpy依赖
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图,可以很清晰地看到像素对齐以后的效果:
网友评论