利用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, 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圖,可以很清晰地看到畫素對齊以後的效果:
作者:_ALi_
連結:https://www.jianshu.com/p/3cc8a99a185e
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。