#はじめに
先日PythonでD435を動かすラッパーのビルド方法をアップしたので
実際にD435を動かすスクリプトをアップします
#環境
windows10
python:3.6.6とか3.6.7とか3.6.8
OpenCV:3.4.2
pyrealsense2:2.19.0
numpy:1.15.1
#スクリプト全体
下記のプログラムで深度のカラーマップが表示されます
import pyrealsense2 as rs
import numpy as np
import cv2
# ストリーム(IR/Color/Depth)の設定
config = rs.config()
config.enable_stream(rs.stream.infrared, 1, 640, 480, rs.format.y8, 30)
config.enable_stream(rs.stream.infrared, 2, 640, 480, rs.format.y8, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
# ストリーミング開始
pipeline = rs.pipeline()
profile = pipeline.start(config)
try:
while True:
# フレーム待ち
frames = pipeline.wait_for_frames()
#IR1
ir_frame1 = frames.get_infrared_frame(1)
ir_image1 = np.asanyarray(ir_frame1.get_data())
#IR2
ir_frame2 = frames.get_infrared_frame(2)
ir_image2 = np.asanyarray(ir_frame2.get_data())
#RGB
RGB_frame = frames.get_infrared_frame()
RGB_image = np.asanyarray(ir_frame2.get_data())
#Depth
depth_frame = frames.get_depth_frame()
depth_image = np.asanyarray(depth_frame.get_data())
#depth imageをカラーマップに変換
depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.08), cv2.COLORMAP_JET)
# 表示
cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
cv2.imshow('RealSense', depth_colormap)
if cv2.waitKey(1) & 0xff == 27:
cv2.destroyAllWindows()
break
finally:
# ストリーミング停止
pipeline.stop()
#解説
中身をざっくり説明します
##ストリーム(IR/Color/Depth)の設定
ここで、IR,RGB,Depthの入力のサイズとかフレームレートとか設定します
IRはステレオで2台積んでいるので下記のように記入するとカメラを指定できます
使わないカメラがある場合、設定しなくても大丈夫です。
DepthはハードウェアがあるわけではないですがIRカメラ+プロジェクタを使って
カメラ内で距離データが演算されデータが格納されます
設定値についてはマニュアルかrealsense-viewerあたりを動かして
設定できる値を記入してください
RGBとIR(Depth)で設定値が結構違うのでイラっとします(笑
config = rs.config()
config.enable_stream(rs.stream.infrared, 1, 640, 480, rs.format.y8, 30)
config.enable_stream(rs.stream.infrared, 2, 640, 480, rs.format.y8, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
##ストリーミング開始
読んで字のままでございます
pipeline = rs.pipeline()
profile = pipeline.start(config)
##※ここから先がループ部分です
フレーム待ちは絶対必要ですが、各カメラの出力の配列は必要なのだけ書けばOKです
# フレーム待ち
frames = pipeline.wait_for_frames()
#IR1
ir_frame1 = frames.get_infrared_frame(1)
ir_image1 = np.asanyarray(ir_frame1.get_data())
#IR2
ir_frame2 = frames.get_infrared_frame(2)
ir_image2 = np.asanyarray(ir_frame2.get_data())
#RGB
RGB_frame = frames.get_infrared_frame()
RGB_image = np.asanyarray(ir_frame2.get_data())
#Depth
depth_frame = frames.get_depth_frame()
depth_image = np.asanyarray(depth_frame.get_data())
##depth imageをカラーマップに変換
上記のままですとDepthの配列がuint16なので疑似RGB変換をしてコンターっぽくします
この変換だといまいちなのですが、とりあえず表示させるだけなら問題ないので掲載します
※対策版は今後UPするかも・・・
depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.08), cv2.COLORMAP_JET)
##表示
何位変哲もないOpenCVなので割愛
cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
cv2.imshow('RealSense', depth_colormap)
if cv2.waitKey(1) & 0xff == 27:
cv2.destroyAllWindows()
break
上記ですとRGBとDepthの画角が合わないのですが
それはまた次回以降に・・・