1.文件目录
2.程序
import pyrealsense2 as rs
import numpy as np
import cv2
# 初始化RealSense API
pipeline = rs.pipeline()
# 创建配置对象
config = rs.config()
# 启用深度流和两个红外流
#注意之前显示usb2.1,使用不了,重新拔插,显示usb3.1,可以使用
#config.enable_stream(rs.stream.depth, 1280, 720, rs.format.z16, 30)
config.enable_stream(rs.stream.infrared, 1, 1280, 720, rs.format.y8, 30) # 第一个红外摄像头 左#启用红外摄像头流,索引为1,分辨率为1280x720,格式为Y8,帧率为30fps。
config.enable_stream(rs.stream.infrared, 2, 1280, 720, rs.format.y8, 30) # 第二个红外摄像头,右
config.enable_stream(rs.stream.color, 1280,720, rs.format.bgr8, 30)
# 开始实时数据流
conf = pipeline.start(config)
depth_sensor = conf.get_device().first_depth_sensor()
depth_sensor.set_option(rs.option.emitter_enabled, 0) # 0关闭红外激光,1开启
# 创建窗口显示图像
window_name1 = "infrared1"
cv2.namedWindow(window_name1, 0) # 左目,(镜头朝前)
window_name2 = "infrared2"
cv2.namedWindow(window_name2, 0) # 右目
i = 20
try:
while True:
# 等待下一帧
frames = pipeline.wait_for_frames()
# 获取红外图像
infrared_frame_1 = frames.get_infrared_frame(1)
infrared_frame_2 = frames.get_infrared_frame(2)
#获取彩色图像
color_frame = frames.get_color_frame()
# 将红外帧转换为可显示的图像
ir_image_1 = np.asanyarray(infrared_frame_1.get_data())
ir_image_2 = np.asanyarray(infrared_frame_2.get_data())
color_image = np.asanyarray(color_frame.get_data())
# 显示图像
cv2.imshow(window_name1, ir_image_1)
cv2.imshow(window_name2, ir_image_2) # 右目
cv2.namedWindow('color', 0)
cv2.imshow('color', color_image)
#concat0 = cv2.hconcat([img_left, img_right])
concat0 = cv2.hconcat([ir_image_1, ir_image_2]) #使用cv2库进行水平拼接图像
cv2.namedWindow("con0", 0)
cv2.imshow("con0", concat0)
key = cv2.waitKey(1) & 0xFF
if key == ord('w'): # 如果按下'w'键
#相对路径
cv2.imwrite("./color_infrared_images/infrared/%d.jpg" % i, concat0)
cv2.imwrite("./color_infrared_images/color/%d.jpg" % i, color_image) #可以在文件夹中存入图片 (相对路径)
#cv2.imwrite("./photo/color_infrared_images/color/%d.jpg" % i, color_image)#(不可以保存)虽终端有显示“Save images 0 succeed!”,但无法在文件夹存入图片
#路径有误,不应该添加photo
#绝对路径
#cv2.imwrite("E:\pycharm\pyProject_d435i\photo\color_infrared_images\color/%d.jpg" % i, color_image) #可以保存,但不推荐(/\混用)
#cv2.imwrite("E:\pycharm\pyProject_d435i\photo\color_infrared_images\color\%d.jpg" % i, color_image)#可以保存,但python语法中,反斜杠用作转义字符的开始。
# 例如,\n 代表换行,\t 代表制表符,所以一般双反斜杠(\\)来表示一个实际的反斜杠,因为单个反斜杠用作转义字符
#cv2.imwrite("E:\\pycharm\\pyProject_d435i\\photo\\color_infrared_images\\color\\%d.jpg" % i, color_image) #可以保存, 双反斜杠\\
#cv2.imwrite(r"E:\pycharm\pyProject_d435i\photo\color_infrared_images\color\%d.jpg" % i, color_image) #可以保存,
# 当使用原始字符串(在字符串前加上 r),Python不会处理字符串中的转义字符,所有的字符都按照字面意义处理。
# 避免了使用双反斜杠来转义每个反斜杠,使得路径的书写更加直观和简洁
#cv2.imwrite("E:/pycharm/pyProject_d435i/photo/color_infrared_images/color/%d.jpg" % i, color_image) #可以保存,
#在Python路径字符串中,斜杠/ 通常不需要特殊处理,可以直接使用。
print("Save images %d succeed!" % i)
i += 1
elif key == ord('q'): # 如果按下'q'键
cv2.destroyAllWindows()
break # 退出循环,关闭窗口
finally:
# 停止管道并关闭窗口
pipeline.stop()
3.一些解释
在Python中,反斜杠(\
)和斜杠(/
)在文件路径字符串中有不同的用途和含义:
-
反斜杠(
\
):- 在普通字符串中,反斜杠用作转义字符的开始。例如,
\n
代表换行,\t
代表制表符。 - 在Windows文件路径中,反斜杠是路径分隔符,但在Python字符串中需要使用双反斜杠(
\\
)来表示一个实际的反斜杠,因为单个反斜杠用作转义字符。
- 在普通字符串中,反斜杠用作转义字符的开始。例如,
-
斜杠(
/
):- 在Python字符串中,斜杠通常不需要特殊处理,可以直接使用。
- 在Unix和Linux系统中,斜杠是文件路径的标准分隔符。
- 在Python中,无论操作系统如何,斜杠都可以用来表示文件路径分隔符,并且不需要转义。
-
原始字符串(使用
r
前缀):- 当使用原始字符串(在字符串前加上
r
),Python不会处理字符串中的转义字符,所有的字符都按照字面意义处理。 - 这在处理Windows文件路径时特别有用,因为原始字符串中不需要对反斜杠进行转义。原始字符串避免了使用双反斜杠来转义每个反斜杠,使得路径的书写更加直观和简洁
- 当使用原始字符串(在字符串前加上
#1.使用双反斜杠
path = "E:\\pycharm\\pyProject_d435i\\photo\\color_infrared_images\\color\\image.jpg"
#2.使用使用斜杠
path = "E:/pycharm/pyProject_d435i/photo/color_infrared_images/color/image.jpg"
#3.使用原始字符串
path = r"E:\pycharm\pyProject_d435i\photo\color_infrared_images\color\image.jpg"
参考资料:
1.kimi.ai
双目摄像头Matlab参数标定