最近在学习机器视觉,主要基于ZED做一些视觉算法,故记录下学习过程。本篇文章主要是获取ZED实时视频。
摄像头:ZED USB接口
系统:Ubuntu18.04
创建python文件,test.py
import cv2
import numpy as np
import pyzed.sl as sl #python3 zed api
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() # 图像
# # 获取分辨率
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.RIGHT) # image:容器,sl.VIEW.LEFT:内容 ,右镜头
img = image.get_data() # 转换成图像数组,便于后续的显示或者储存
# 显示彩色图
view = cv2.resize(img,(640,480))
cv2.imshow("View", view) #显示图像
key = cv2.waitKey(1) #waitkey控制着imshow的持续时间
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()
if __name__ == "__main__":
image_capture()
python3 test.py