§ 2.6 深度图获取与动态更新

1. 导入依赖

# 将astra.py所在的目录添加到系统路径里面
# 这样Python可以找到这个包
import sys
sys.path.append("../astra-open3d-python/")

# - 矩阵运算
import numpy as np
# - 图像处理
import cv2 
# - 绘图可视化
from matplotlib import pyplot as plt

# 自定义库
# - Astra 3D相机类
from astra import Astra 

2. 相机初始化

可以配置图像对齐 image_registration 开关。

# 是否获取对齐后的深度图
# - True :   获取彩色相机坐标系下的深度图
# - False :  获取IR相机坐标系下的深度图
image_registration = True

# 创建相机对象
# config_path要写的是Astra 3D相机的配置文件夹路径
camera = Astra(config_path="../astra-open3d-python/config/")
# 初始相机视频流
camera.init_video_stream(video_mode="depth", image_registration=image_registration)
# 读取相机参数(相机内参)
camera.load_cam_calib_data()

3. 获取深度图

# 采集深度图, 单位为mm
# 数据格式为np.float32
depth_img = camera.read_depth_img() 

4. 显示深度图

用灰度表达远近,最远处为白色,最近为黑色。

# 使用灰度图展示深度图
plt.imshow(depth_img,  cmap="gray")

# 保存图像
plt.savefig("data/read_depth_image/gray.png")

将深度图转换为彩色的可视化图:

# 将深度图转换为彩图,进行可视化
canvas = camera.depth_img2canvas(depth_img)
plt.imshow(canvas[:, :, ::-1])

# 保存图像
plt.savefig("data/read_depth_image/canvas.png")

5. 保存深度图

深度图本身是Numpy的 np.float32 格式。将深度图保存为二进制文件:

# 深度图像保存路径
depth_img_path = "data/read_depth_image/demo.npy"
# 以二进制格式保存Numpy对象
np.save(depth_img_path, depth_img)

image-20220911235203332

6. 读取深度图

# 深度图像保存路径
depth_img_path = "data/read_depth_image/demo.npy"
# 图像保存
depth_img2 = np.load(depth_img_path)

if depth_img2 is None:
    print("深度图读取失败")
else:
    print("深度图读取成功")
# 将深度图转换为彩图,进行可视化
canvas = camera.depth_img2canvas(depth_img2)
plt.imshow(canvas[:, :, ::-1])