基于Python的ZED2教程 2.获取图片

本教程将讲述如何获取左摄像头的图片,当获得50张图片时循环停止。

创建摄像头

创建并配置ZED摄像头,本教程将摄像头分辨率为H1080和帧速率30fps。

# Create a ZED camera object
zed = sl.Camera()
# Set configuration 
parametersinit_params = sl.InitParameters()
init_params.camera_resolution = sl.RESOLUTION.HD1080 # Use HD1080 video mode
init_params.camera_fps = 30 # Set fps at 30
# Open the camera
err = zed.open(init_params)
if (err != sl.ERROR_CODE.SUCCESS) :
    exit(-1)

获取摄像头数据

首先需要调用Camera.grab()函数,这个函数也需要一些参数,在本教程中使用默认的参数。如果想要获得并处理一张图片,就必须调用这个函数。这个函数的返回值是状态信息,可以通过该函数知道是否摄像头有新的帧或者发生了故障。

# Grab an image
if (zed.grab() == sl.ERROR_CODE.SUCCESS) :
    # A new image is available 
    if grab() returns SUCCESS

接下来需要用到Camera.retrieve_image()Camera.get_timestamp()这两个函数来获取图片和获取图片的时间。

zed.retrieve_image(image,sl.VIEW.LEFT) # Get the left 
imagetimestamp = zed.get_current_timestamp(sl.TIME_REFERENCE.IMAGE) # Get the timestamp of the image
print("Image resolution: ", image.get_width(), " x ", image.get_height()," || Image timestamp: ", timestamp.get_milliseconds())

retrieve_image()函数需要sl.Mat作为一个参数,同时也需要VIEW选项作为一个参数。在循环之前我们需要创建Mat类型。创建Mat类型时并不会分配内存,只有在调用retrieve_image()函数时才会分配内存。

# Capture 50 frames and stop
i = 0image = sl.Mat()
while (i < 50) :    
    # Grab an image    
    if (zed.grab() == sl.ERROR_CODE.SUCCESS) :  
        # A new image is available if grab() returns SUCCES
        zed.retrieve_image(image, sl.VIEW.LEFT)
        # Get the left image        
        timestamp = zed.get_timestamp(sl.TIME_REFERENCE.IMAGE) 
        # Get the timestamp at the time the image was captured  
        print("Image resolution: ", image.get_width(), " x ", image.get_height()," || Image timestamp: ", timestamp.get_milliseconds())        
        i = i+1

之后关闭摄像头即可。

# Close the camera
zed.close()return 0

示例代码

import pyzed.sl as sl
import cv2.cv2 as cv
def main():
    zed = sl.Camera()
    InitPara = sl.InitParameters()
    InitPara.camera_fps = 30    
    InitPara.camera_resolution = sl.RESOLUTION.HD720
    err = zed.open(InitPara)
    if err != sl.ERROR_CODE.SUCCESS:
        exit(-1)
    left_img = sl.Mat()
    runtimeParas = sl.RuntimeParameters()    
    while(True):    
        if zed.grab(runtimeParas) == sl.ERROR_CODE.SUCCESS:
            zed.retrieve_image(left_img, view=sl.VIEW.LEFT)
            time_stamp = zed.get_timestamp(sl.TIME_REFERENCE.CURRENT)            print(time_stamp.get_milliseconds())            
            img = left_img.get_data()            
            cv.imshow("img", img)            
            cv.waitKey(5)
if __name__ == "__main__":    main()
  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
ZED2i是一款由Stereolabs开发的双立体相机,它可以用于进行深度感知和三维重建。在Python中,可以使用Stereolabs提供的ZED SDK来实现双目立体匹配。 首先,你需要安装ZED SDK并配置好相机的驱动程序。然后,你可以使用Python编写代码来获取双目图像,并进行立体匹配和深度估计。 以下是一个简单的示例代码,展示了如何使用ZED SDK进行双目立体匹配: ```python import pyzed.sl as sl def main(): # 创建ZED相机对象 zed = sl.Camera() # 设置相机配置 init_params = sl.InitParameters() init_params.camera_resolution = sl.RESOLUTION.HD720 init_params.camera_fps = 30 # 打开相机 err = zed.open(init_params) if err != sl.ERROR_CODE.SUCCESS: print("相机打开失败") exit(1) # 创建深度图像对象 depth_map = sl.Mat() # 创建双目图像对象 image_left = sl.Mat() image_right = sl.Mat() # 创建立体匹配参数对象 stereo_params = sl.StereoParameters() # 获取立体匹配参数 zed.get_camera_information().stereo_calib.get_stereo_parameters(stereo_params) # 开始捕获图像并进行立体匹配 while True: if zed.grab() == sl.ERROR_CODE.SUCCESS: # 获取左右图像 zed.retrieve_image(image_left, sl.VIEW.LEFT) zed.retrieve_image(image_right, sl.VIEW.RIGHT) # 进行立体匹配 zed.retrieve_measure(depth_map, sl.MEASURE.DEPTH) # 在这里可以对深度图像进行处理或者显示 # 关闭相机 zed.close() if __name__ == "__main__": main() ``` 在这个示例代码中,我们首先创建了一个ZED相机对象,并设置了相机的分辨率和帧率。然后,我们打开相机,并创建了深度图像对象和双目图像对象。接下来,我们获取了立体匹配参数,并开始循环捕获图像并进行立体匹配。最后,我们关闭了相机。 请注意,这只是一个简单的示例代码,你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值