§ 2.7 IR图获取与动态更新

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. 相机初始化

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

3. 获取IR图

# 采集IR图
img_ir = camera.read_ir_img() 

4. 显示IR图

# 显示画面
# 将图像从BGR空间转换为RGB空间
plt.imshow(img_ir[:, :, ::-1])

5. 图像移除畸变

# 图像移除畸变
img_ir_undistor = camera.ir_camera.remove_distortion(img_ir)
# 显示去除畸变的彩图 
plt.imshow(img_ir_undistor[:, :, ::-1])

6. 保存图像

保存原始IR图

# 图像保存路径
img_path = "data/read_ir_image/demo.png"
# 图像保存
ret = cv2.imwrite(img_path, img_ir)
# 输出日志
if ret:
    print("图像保存成功")
else:
    print("检查图像保存路径是否存在,且路径不可以有中文。")

输出日志:

图像保存成功

image-20220912001000843

7. 读取IR图

# 图像保存路径
img_path = "data/read_ir_image/demo.png"
# 图像载入
img_ir2 = cv2.imread(img_path)

if img_ir2 is None:
    print("图像读取失败")
else:
    print("图片读取成功")

输出日志:

图片读取成功

# 显示从文件里读取的彩图
plt.imshow(img_ir2[:, :, ::-1])

8. IR图动态更新

在终端里面运行IR图动态刷新的示例代码:

python read_ir_img.py

image-20220912002406551

read_ir_img.py

'''
Astra 3D相机 - 测试IR图读取与动态更新
----------------------------------------------
@作者: 阿凯爱玩机器人
@QQ: 244561792
@微信: xingshunkai
@邮箱: xingshunkai@qq.com
@B站: https://space.bilibili.com/40344504
'''
# 将astra.py所在的目录添加到系统路径里面
# 这样Python可以找到这个包
import sys
sys.path.append("../astra-open3d-python/")
# - 矩阵运算
import numpy as np
# - 图像处理
import cv2 
# 自定义库
# - Astra 3D相机类
from astra import Astra 

# 配置项
# - 移除图像畸变
rm_distortion = False

# 创建相机对象
# config_path要写的是Astra 3D相机的配置文件夹路径
camera = Astra(config_path="../astra-open3d-python/config/")

try:
	# 初始相机视频流
	camera.init_video_stream(video_mode="ir")
except Exception as e:
	print("[错误] 没有发现Astra设备, 请检查接线或驱动")
	exit(-1)

if rm_distortion:
	# 读取相机参数(相机内参)
	camera.load_cam_calib_data()

# 创建窗口
win_flag = cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO | cv2.WINDOW_GUI_EXPANDED
cv2.namedWindow("ir", flags=win_flag)

while True:
	# 采集IR图, 色彩空间BGR
	img_ir = camera.read_ir_img() 
	# 去除IR图畸变
	if rm_distortion:
		img_ir = camera.rgb_camera.remove_distortion(img_ir)
	# 显示图像
	cv2.imshow('ir', img_ir)
	key = cv2.waitKey(1)
	if key == ord('q'):
		# 如果按键为q 代表quit 退出程序
		break

# 关闭摄像头
camera.release()
# 销毁所有的窗口
cv2.destroyAllWindows()