intel D435i 双目相机 拍摄图片并保存 python调用示例

程序说明:

本程序提供了一个最简单的python调用Intel双目相机D435/D435i的方法,作用是调用相机拍摄图片并保存到本地。

可拍摄的图片有:左目图像/右目图像/RGB图像/深度图像/深度颜色渲染图像

若要调整 保存路径、图片分辨率 可以根据需要修改代码。

运行程序前需要在当前路径创建一个名为“camera_shot”的文件夹,如果文件夹名称错误或者路径错误是找不到拍摄的图片的。


 python 示例代码如下:

import pyrealsense2 as rs
import numpy as np
import cv2

counter = 0
# 若要保存到其他文件夹,修改此路径
folder = './camera_shot/'
def shot(pos, frame):
    global counter
    path = folder + pos + "_" + str(counter) + ".png"
    cv2.imwrite(path, frame)
    print("snapshot saved into: " + path)

pipeline = rs.pipeline()
config = rs.config()
# 配置深度和颜色流
# 10、15或者30可选,20或者25会报错,其他帧率未尝试
# 配置颜色相机
config.enable_stream(rs.stream.color, 848, 480, rs.format.bgr8, 15)
# 配置红外相机
config.enable_stream(rs.stream.infrared, 1, 848, 480, rs.format.y8, 15)
config.enable_stream(rs.stream.infrared, 2, 848, 480, rs.format.y8, 15)
# 配置深度图像
config.enable_stream(rs.stream.depth, 848, 480, rs.format.z16, 15)
# Start streaming
profile = pipeline.start(config)

# 创建对齐对象, rs.align 允许我们将深度帧与其他帧对齐, "align_to" 是计划对其深度帧的流类型
align_to = rs.stream.color
align = rs.align(align_to)

try:
    while True:
        frames = pipeline.wait_for_frames()
        # 将深度框与颜色框对齐
        aligned_frames = align.process(frames)
        # 获取对齐帧
        aligned_depth_frame = aligned_frames.get_depth_frame()
        if not aligned_depth_frame:
            continue
        depth_frame = 50*np.asanyarray(aligned_depth_frame.get_data())
        # 将深度图转化为伪彩色图方便观看
        depth_colormap = cv2.applyColorMap\
            (cv2.convertScaleAbs(depth_frame, alpha=0.008)
             , cv2.COLORMAP_JET)
        # cv2.imshow('1 depth', depth_colormap)

        # color frames
        color_frame = aligned_frames.get_color_frame()
        if not color_frame:
            continue
        color_frame = np.asanyarray(color_frame.get_data())
        # cv2.imshow('2 color', color_frame)

        # left frames
        left_frame = frames.get_infrared_frame(1)
        if not left_frame:
            continue
        left_frame = np.asanyarray(left_frame.get_data())
        cv2.imshow('3 left_frame', left_frame)

        # right frames
        right_frame = frames.get_infrared_frame(2)
        if not right_frame:
            continue
        right_frame = np.asanyarray(right_frame.get_data())
        cv2.imshow('4 right_frame', right_frame)

        c = cv2.waitKey(1)

        # 如果按下ESC则关闭窗口(ESC的ascii码为27),同时跳出循环
        if c == 27:
            cv2.destroyAllWindows()
            break

        if c == ord('t'):
            # 默认保存五张图片,如果不需要保存某图像把对应那行代码注释掉即可
            shot('left_shot', left_frame)
            shot('right_shot', right_frame)
            shot('color_shot', color_frame)
            shot('depth_colormap', depth_colormap)
            shot('depth_frame', depth_frame)
            counter += 1

finally:
    # Stop streaming
    pipeline.stop()

  • 11
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
Python中实现PID控制是相对简单的。下面是一个基本的示例代码,演示了如何使用PID控制器来控制一个系统。 ```python class PIDController: def __init__(self, Kp, Ki, Kd): self.Kp = Kp self.Ki = Ki self.Kd = Kd self.last_error = 0.0 self.integral = 0.0 def compute_control_signal(self, setpoint, measurement, dt): error = setpoint - measurement # Proportional term P = self.Kp * error # Integral term self.integral += error * dt I = self.Ki * self.integral # Derivative term derivative = (error - self.last_error) / dt D = self.Kd * derivative # Total control signal control_signal = P + I + D # Update last error for next iteration self.last_error = error return control_signal ``` 使用该PID控制器的示例: ```python # 创建PID控制器实例,设置控制参数 pid_controller = PIDController(Kp=1.0, Ki=0.5, Kd=0.2) # 设置设定值和初始测量值 setpoint = 10.0 measurement = 0.0 # 模拟时间步长 dt = 0.1 # 模拟控制过程 for _ in range(100): control_signal = pid_controller.compute_control_signal(setpoint, measurement, dt) # 在这里将控制信号应用到系统中,并获取新的测量值 # 这里仅为演示,假设控制信号直接影响测量值 measurement += control_signal * dt print("Setpoint: {:.2f}, Measurement: {:.2f}, Control Signal: {:.2f}".format(setpoint, measurement, control_signal)) ``` 上述代码中的`PIDController`类实现了一个简单的PID控制器。在实例化时,需要传入控制参数 Kp、Ki 和 Kd。然后,可以使用`compute_control_signal`方法来计算控制信号。在每个时间步长内,将当前的设定值和测量值传递给`compute_control_signal`方法,它将返回相应的控制信号。然后可以将该信号应用到系统中,更新测量值。 请注意,这只是一个基本示例,可能需要根据具体的系统和需求进行适当的修改和调整。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值