Intel Realsense D435(Python Wrapper)example03: Stream Alignment 流对齐 通过深度去除背景
https://github.com/IntelRealSense/librealsense/blob/development/wrappers/python/examples/align-depth2color.pyDemonstrate a way of performing background removal by aligning depth images to color imag..
·
Demonstrate a way of performing background removal by aligning depth images to color images and performing simple calculation to strip the background.
【通过将深度图像与彩色图像对齐并执行简单的计算以去除背景来演示执行背景去除的方法。】
## License: Apache 2.0. See LICENSE file in root directory.
## Copyright(c) 2017 Intel Corporation. All Rights Reserved.
#####################################################
## Align Depth to Color ##
#####################################################
# First import the library 首先导入库
import pyrealsense2 as rs
# Import Numpy for easy array manipulation 导入Numpy以便于数组操作
import numpy as np
# Import OpenCV for easy image rendering 导入OpenCV以简化图像渲染
import cv2
# Create a pipeline 创建管道
pipeline = rs.pipeline()
# Create a config and configure the pipeline to stream
# different resolutions of color and depth streams
# 创建一个流配置并用它配置管道并以流式传输不同分辨率的颜色和深度流
config = rs.config()
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
# Start streaming 开始流式传输
profile = pipeline.start(config)
# Getting the depth sensor's depth scale (see rs-align example for explanation)
# 获取深度传感器的深度比例(有关说明,请参见rs-align示例)
depth_sensor = profile.get_device().first_depth_sensor()
depth_scale = depth_sensor.get_depth_scale()
print("Depth Scale is: " , depth_scale)
# We will be removing the background of objects more than
# clipping_distance_in_meters meters away
# 我们将移除超过cliping_distance_in_meters米远的对象的背景
clipping_distance_in_meters = 1 #1 meter
clipping_distance = clipping_distance_in_meters / depth_scale
# Create an align object 创建一个对齐对象
# rs.align allows us to perform alignment of depth frames to others frames
# rs.align允许我们执行深度帧与其他帧的对齐
# The "align_to" is the stream type to which we plan to align depth frames.
# “ align_to”是我们计划将深度框架对齐的流类型。
align_to = rs.stream.color
align = rs.align(align_to)
# Streaming loop 流循环
try:
while True:
# Get frameset of color and depth 获取颜色和深度的帧集
frames = pipeline.wait_for_frames()
# frames.get_depth_frame() is a 640x360 depth image
# frames.get_depth_frame()是640x360的深度图像
# Align the depth frame to color frame 将深度框与颜色框对齐
aligned_frames = align.process(frames)
# Get aligned frames 获取对齐的帧
aligned_depth_frame = aligned_frames.get_depth_frame() # aligned_depth_frame is a 640x480 depth image
# aligned_depth_frame是640x480深度的图像
color_frame = aligned_frames.get_color_frame()
# Validate that both frames are valid 验证两个帧均有效
if not aligned_depth_frame or not color_frame:
continue
depth_image = np.asanyarray(aligned_depth_frame.get_data())
color_image = np.asanyarray(color_frame.get_data())
# Remove background - Set pixels further than clipping_distance to grey
# 移除背景-将比clip_distance更远的像素设置为灰色
grey_color = 153
depth_image_3d = np.dstack((depth_image,depth_image,depth_image)) #depth image is 1 channel, color is 3 channels
# 深度图像为1通道,彩色为3通道
bg_removed = np.where((depth_image_3d > clipping_distance) | (depth_image_3d <= 0), grey_color, color_image)
# Render images 渲染图像
depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)
images = np.hstack((bg_removed, depth_colormap))
cv2.namedWindow('Align Example', cv2.WINDOW_AUTOSIZE)
cv2.imshow('Align Example', images)
key = cv2.waitKey(1)
# Press esc or 'q' to close the image window
if key & 0xFF == ord('q') or key == 27:
cv2.destroyAllWindows()
break
finally:
pipeline.stop()
运行结果:
更多推荐
所有评论(0)