# zed相机的基本使用
# ===========================
# author: wubing
# date :2020.11.22
# ===========================
import pyzed.sl as sl
import cv2
import numpy as np
camera_settings = sl.VIDEO_SETTINGS.BRIGHTNESS
str_camera_setting = "BRIGHTNESS"
step_camera_settings = 1
def main():
print("Running..")
init = sl.InitParameters() # 调用库里面的初始化类
cam = sl.Camera() # 定义相机的类
if not cam.is_opened(): # cam.is_opened() 判断相机是否正常打开
print("Opening ZED cam.")
status = cam.open(init) # 打开相机,并返回状态
if status != sl.ERROR_CODE.SUCCESS:
print(repr(status))
exit()
runtime = sl.RuntimeParameters() # 对cam.grab()配置的参数
mat = sl.Mat() # mat类 返回矩阵的类,有四个channels <class 'pyzed.sl.Mat'>
left_mat = sl.Mat()
nor_mat = sl.Mat()
key = ''
while key != 113: # 'q'=113
err = cam.grab(runtime)
# grab:获取 grab(RuntimeParameters) 获取相机最新的一张图片,并根据RuntimeParameters里面的参数进行配置;
# 运行时间较长,具体时间取决与配置参数和硬件
if err == sl.ERROR_CODE.SUCCESS:
cam.retrieve_image(mat, sl.VIEW.DEPTH, type=sl.MEM.CPU)
# grab()函数已经完成了图像的获取和计算,retrieve_image()会根据参数要求找到对于的图片,将其赋给mat,默认是从GPU拷到CPU。
# 如果GPU可以直接映射就可以设置为GPU,不会弄。
cam.retrieve_image(left_mat, sl.VIEW.LEFT, type=sl.MEM.CPU)
cam.retrieve_image(nor_mat, sl.VIEW.NORMALS, type=sl.MEM.CPU)
# cv2.imshow("ZED-depth", mat.get_data()) # mat.get_date()是numpy.ndarray格式的 (720, 1280, 4) 0,1,2channel都是深度图,3channel是白色图片
# print(type(mat.get_data()))
# print(left_mat.get_data().shape)
# img = mat.get_data()
img = nor_mat.get_data()
cv2.imshow("img", img[:,:,3])
cv2.imshow("ZED-normal", nor_mat.get_data())
# cv2.imshow("ZED-left", left_mat.get_data()) # left_mat.get_date()是numpy.ndarray格式的 (720, 1280, 4)
key = cv2.waitKey(5)
else:
key = cv2.waitKey(5)
# print(mat)
cv2.destroyWindow("ZED-depth")
cv2.destroyWindow("ZED-left")
cam.close()
if __name__ == "__main__":
main()