首页IT科技zedcamera(【ZED】从零开始使用ZED相机(二):打开相机+捕获图像)

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

时间2025-04-28 19:00:18分类IT科技浏览14954
导读:引言 关于ZED相机的安装和配置可以先参考【ZED】从零开始使用ZED相机(一):windows下的安装配置与测试,接下来开始二次开发ZED相机。...

引言

关于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                 ”进行想要图像的保存         ,需要注意的是保存路径需要先创建好

终端打印如下:

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

分辨率选择

可捕获的视图

计算获得的视图

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
上网测速软件(《轻松测速!优化网站打开速度的最佳效果》) yolov4和yolov5哪个好(yolov7和yolov5对比有哪些优势?yolov7改进-yolov7详解)