【ZED】从零开始使用ZED相机(二):打开相机+捕获图像

2023-05-16

引言

关于ZED相机的安装和配置可以先参考【ZED】从零开始使用ZED相机(一):windows下的安装配置与测试,接下来开始二次开发ZED相机。
阅读ZED API文档,选择自己使用的语言,学会相机的基本调用函数
在这里插入图片描述
笔者建议:安装包的samples与官方文档配合使用效果更加
在这里插入图片描述
必备导入库:(后面涉及的代码都要导入这两个库)

import pyzed.sl as sl
import cv2 

ZED开发目录:

(1)打开相机,终端打印相机的ZED相机的基本信息

(2)捕获图像(左、右、深度图等)+ 获取计算的数据(视差、深度、3D数据等)

下面详细展开

1 hello_zed(初见ZED)

import pyzed.sl as sl
import cv2 
def hello_zed():
    # 创建相机对象
    zed = sl.Camera()  # Camera是非常重要的一个类

    # 创建初始化参数对象并配置初始化参数
    init_params = sl.InitParameters()
    init_params.sdk_verbose = False  # 相机有很多可以初始化的参数,用到一个认识一个

    # 打开相机(终端打开,但是看不到相机的画面,需要用到cv2.imshow显示相机画面,后面再介绍)
    err = zed.open(init_params)  # 指定参数打开相机
    if err != sl.ERROR_CODE.SUCCESS:
        exit(1)
    # 获得相机的信息,笔者列举了一部分,并不是全部信息,读者可以自行探究
    zed_info = zed.get_camera_information()
    print('相机序列号:%s' % zed_info.serial_number)
    print('相机型号:%s' % zed_info.camera_model)
    print('相机分辨率: width:%s, height:%s' % (zed_info.camera_resolution.width, zed_info.camera_resolution.height))
    print('相机FPS:%s' % zed_info.camera_fps)
    print('相机外部参数:')
    print('相机旋转矩阵R:%s' % zed_info.calibration_parameters.R)
    print('相机变换矩阵T:%s' % zed_info.calibration_parameters.T)
    print('相机基距:%s' % zed_info.calibration_parameters.get_camera_baseline())
    print('初始化参数:')
    zed_init = zed.get_init_parameters()
    print('相机分辨率:%s' % (zed_init.camera_resolution))
    print('深度最小:%s' % (zed_init.depth_minimum_distance))
    print('深度最大:%s' % (zed_init.depth_maximum_distance))
    # 关闭相机
    zed.close()

if __name__ == "__main__":
    hello_zed()

2 image_capture(捕获图像)

import pyzed.sl as sl
import cv2 
import os
# 2. 捕获图像
def image_capture():
    zed = sl.Camera()
    # 设置相机的分辨率1080和采集帧率30fps
    init_params = sl.InitParameters()
    init_params.camera_resolution = sl.RESOLUTION.HD1080  # Use HD1080 video mode
    init_params.camera_fps = 30  # fps可选:15、30、60、100

    err = zed.open(init_params)  # 根据自定义参数打开相机
    if err != sl.ERROR_CODE.SUCCESS:
        exit(1)
    runtime_parameters = sl.RuntimeParameters()  # 设置相机获取参数
    runtime_parameters.sensing_mode = sl.SENSING_MODE.STANDARD  
    i = 0
    # 创建sl.Mat对象来存储图像(容器),Mat类可以处理1到4个通道的多种矩阵格式(定义储存图象的类型)
    image = sl.Mat()  # 图像
    disparity = sl.Mat()  # 视差值
    dep = sl.Mat()  # 深度图
    depth = sl.Mat()  # 深度值
    point_cloud = sl.Mat()  # 点云数据
    # 获取分辨率
    resolution = zed.get_camera_information().camera_resolution
    w, h = resolution.width , resolution.height
    x,y = int(w/2),int(h/2)  # 中心点

    while True:
        # 获取最新的图像,修正它们,并基于提供的RuntimeParameters(深度,点云,跟踪等)计算测量值。
        if zed.grab(runtime_parameters) == sl.ERROR_CODE.SUCCESS:  # 相机成功获取图象
            # 获取图像
            timestamp = zed.get_timestamp(sl.TIME_REFERENCE.CURRENT)  # 获取图像被捕获时的时间点
            zed.retrieve_image(image, sl.VIEW.LEFT)  # image:容器,sl.VIEW.LEFT:内容
            img = image.get_data()  # 转换成图像数组,便于后续的显示或者储存
            # 获取视差值
            zed.retrieve_measure(disparity,sl.MEASURE.DISPARITY,sl.MEM.CPU)
            dis_map = disparity.get_data()
            # 获取深度
            zed.retrieve_measure(depth,sl.MEASURE.DEPTH,sl.MEM.CPU)  # 深度值
            zed.retrieve_image(dep,sl.VIEW.DEPTH)  # 深度图
            depth_map = depth.get_data()
            dep_map = dep.get_data()
            # 获取点云
            zed.retrieve_measure(point_cloud,sl.MEASURE.XYZBGRA,sl.MEM.CPU)
            point_map = point_cloud.get_data()
            print('时间点',timestamp.get_seconds(),'中心点视差值',dis_map[x,y],'中心点深度值',depth_map[x,y],'中心点云数据',point_map[x,y])
            # 利用cv2.imshow显示视图,并对想要的视图进行保存
            view = np.concatenate((cv2.resize(img,(640,360)),cv2.resize(dep_map,(640,360))),axis=1)
            cv2.imshow("View", view)
            key = cv2.waitKey(1)
            if key & 0xFF == 27:  # esc退出
                break
            if key & 0xFF == ord('s'):  # 图像保存
                savePath = os.path.join("./images", "V{:0>3d}.png".format(i))  # 注意根目录是否存在"./images"文件夹
                cv2.imwrite(savePath, view)
            i = i + 1
    zed.close()

视图显示结果如下:笔者通过设置按键“s”进行想要图像的保存,需要注意的是保存路径需要先创建好
在这里插入图片描述

终端打印如下:
在这里插入图片描述

代码中涉及的可选参数(点击关键字可进入官方文档链接)

  1. 分辨率选择
    在这里插入图片描述

  2. 可捕获的视图
    在这里插入图片描述

  3. 计算获得的视图
    在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【ZED】从零开始使用ZED相机(二):打开相机+捕获图像 的相关文章

  • QT的中文显示乱码问题解决

    QT的中文显示乱码问题解决 QT的中文显示乱码问题解决 xff1a 1 查看源文件的编码格式 xff0c 有必要的话转换源文件的编码格式再重新编译运行尝试汉字能否正常显示 2 在代码里面解决 xff1a 3 用法 xff1a QT的中文显示
  • 0.9 - GPIO寄存器的C语言映射与STM32库函数雏形构建思路

    首先 xff0c 从参考手册可知 xff0c 程序存储器 xff08 flash xff09 数据存储器 SRAM 寄存器 外设控制 和输入输出端口被组织在同一个4GB的线性地址空间内 数据字节以小端格式存放在存储器中 一个字里的最低地址字

随机推荐

  • Linux文件/文件夹建立软硬链接

    建立软连接 xff1a sudo ln s home spike Downloads redis src redis server usr local bin redis server 源文件 链接到 目标文件 xff0c 这两个文件目录都
  • Linux中记录终端(Terminal)输出到文本文件四种方法

    Linux中记录终端 xff08 Terminal xff09 输出到文本文件 Linux中记录终端 xff08 Terminal xff09 输出到文本文件 一 xff0c 如何把命令运行的结果保存到文件当中 二 command gt f
  • C++ 标准库头文件汇集:

    C 43 43 标准库头文件汇集 xff1a C 43 43 标准库的接口由下列头文件的汇集定义 C 43 43 标准库头文件汇集 xff1a 概念库协程库工具库动态内存管理数值极限错误处理字符串库容器库迭代器库范围库算法库数值库本地化库输
  • C++开源库列表总结记录

    开源 C 43 43 库列表 前言包管理器库音频 音频指纹格式标签CD 性能测试 通信 并发 配置 XMLJSONYAMLTOMLHOCONCSS容器 密码学 数据库 嵌入语言绑定 嵌入式 实时 文件元数据 金融计算 游戏引擎架构 通用多媒
  • C++转义序列和操作符优先级

    C 43 43 转义序列和操作符优先级 1 转义序列 xff1a 2 C 43 43 运算符优先级注解 1 转义序列 xff1a 转义序列 描述 表示 简单转义序列 39 单引号 ASCII 编码中为字节 0x27 34 双引号 ASCII
  • PX4:Policy “CMP0097“ is not known to this version of CMake.

    make px4 fmu v3 时报的错 CMake版本的问题 由https blog csdn net zhizhengguan article details 118380965推测 xff0c 删除cmake policy也没事 ma
  • 安装Anaconda3后再安装ROS(用于PX4)

    记录一下安装anaconda后再安装ROS xff0c 方便未来找错误 出现no module wstool 仔细观察报错信息发现调用的库都在anaconda3 lib python3 7里面了 随后按照https www cnblogs
  • Offboard仿真时出现CMD: Unexpected command 176, result 0

    在用PX4 43 gazebo 43 ROS仿真offboard例程时 xff0c 如果出现以下问题 xff1a 运行以下命令 xff1a roslaunch mavros px4 launch fcu url span class tok
  • Offboard例程的python版本

    因为python的库很丰富 xff0c 有现成的解方程库 xff0c 比如sympy 自己写了一份python版本的自动起飞2m的程序 假设自定义的包名为offb xff0c 在offb下新建scripts文件夹 xff0c 将py文件放在
  • 子类与父类构造函数调用顺序

    子类与父类构造函数调用顺序 构造函数 当创建子类对象时 构造函数的调用顺序 xff1a 静态数据成员的构造函数 gt 父类的构造函数 gt 非静态的数据成员的构造函数 gt 自己的构造函数 注意 无论创建几个对象 该类的静态成员只构建一次
  • 0.1- 机械加工工艺-----切削加工基础

    1 钳工 xff1a 通过工人手持工具进行切削加工 机械加工 xff1a 采用不同的机床 xff08 如车床 铣 床 刨床 磨床 钻床等 xff09 对工 件进行切削加工 2 零件几何参数 xff1a 1 宏观几何参数 xff1a 包括 x
  • 判断当前机器的字节序是大端还是小端?

    字节序 字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序 大端字节序 xff08 Big endian xff09 大端存储模式是指数据的高字节保存在内存的低地址中 xff0c 而数据的低字节保存在内存的高地址中 小端字
  • Qt简易计算器实现复数运算绘图等等

    太久没更新博客了前段时间弄了个计算器 实现了加减乘除复数 带记忆 绘图计算二维图形等功能 先简单讲解下我代码的分块 用图片描述虽然画的丑 实现效果图片 代码放心使用转载请通知 1 Ui 2 在Maindow 类实现计算 maindow h
  • 【tensorboard】可视化events.out.tfevents文件

    介绍 笔者训练Mask RCNN模型时 xff0c 在生成权重 xff08 h5 xff09 文件的同时会实时更新events out tfevents szfj文件 xff0c 通过tensorboard可视化events out tfe
  • 【tensorflow】缺少libcudart.so.11.0和libcudnn.so.8解决方法

    问题 xff1a 安装tensorflow gpu xff0c 在测试是否调用GPU时出现如下问题 xff1a Could not load dynamic library libcudart so 11 0 dlerror libcuda
  • 【Lane】 Ultra-Fast-Lane-Detection 复现

    引言 笔者Ultra Fast Lane Detection专栏链接 x1f517 导航 xff1a Lane Ultra Fast Lane Detection 复现 Lane Ultra Fast Lane Detection xff0
  • 【Lane】Ultra-Fast-Lane-Detection(1)自定义数据集训练

    引言 笔者Ultra Fast Lane Detection专栏链接 x1f517 导航 xff1a Lane Ultra Fast Lane Detection 复现 Lane Ultra Fast Lane Detection xff0
  • 【YOLO】yolov5目标识别+DeepSort目标追踪

    引言 利用yolov5训练的目标识别模型 xff0c 结合DeepSort实现目标追踪 源码下载 xff1a xff08 1 xff09 Yolov5 DeepSort Pytorch 该源码下载下来的yolov5文件夹是空的 xff0c
  • 【ZED】从零开始使用ZED相机(一):windows下的安装配置与测试

    引言 笔者通过在一台重装windows系统的笔记本上 xff0c 从安装开始一步步使用ZED xff0c 希望用一系列笔记的方式完成一个比较完善的ZED使用专栏 xff0c 笔者整理思路的同时 xff0c 也能给读者一定的参考 电脑配置说明
  • 【ZED】从零开始使用ZED相机(二):打开相机+捕获图像

    引言 关于ZED相机的安装和配置可以先参考 ZED 从零开始使用ZED相机 xff08 一 xff09 xff1a windows下的安装配置与测试 xff0c 接下来开始二次开发ZED相机 阅读ZED API文档 xff0c 选择自己使用