1. 程式人生 > >利用pyrealsense獲取深度圖,並進行畫素對齊

利用pyrealsense獲取深度圖,並進行畫素對齊

系統: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圖,可以很清晰地看到畫素對齊以後的效果:

 



作者:_ALi_
連結:https://www.jianshu.com/p/3cc8a99a185e
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。