基于Python的ZED2教程 3.深度感知

本教程将讲述如何用ZED SDK获取深度信息,当获取到50张图片时程序将停止。

创建摄像头

如前例,我们需要先创建初始化摄像头。本例中,我们设置摄像头的分辨率为720,帧速率为60,在PERFORMANCE mode中让深度使能。ZED SDK提供了不同种深度模式:性能、中等、质量。更多信息,可以参考文档。

# Create a ZED camera
zed = sl.Camera()
# Create configuration parameters
init_params = sl.InitParameters()
init_params.sdk_verbose = True # Enable the verbose modeinit_params.depth_mode = sl.DEPTH_MODE.PERFORMANCE 
# Set the depth mode to performance (fastest)
# Open the camera
err = zed.open(init_params)
if (err!=sl.ERROR_CODE.SUCCESS)
    exit(-1)

:在实际中,摄像头的深度已经默认设置为PERFORMANCE模式,无需在初始化时重复设置。

获取数据

现在摄像头已经打开了,我们可以获取图片和深度了,在本例中我们将再次循环50次。获取深度地图和获取图片一样简单。

  • 首先,我们创建一个sl.Mat类型的数据来存放深度地图
  • 然后,通过retrieve_measure()来获取深度地图
# Capture 50 images and depth, then stop
i = 0
image = sl.Mat()
depth = sl.Mat()
point_cloud = sl.Mat()
while (i < 50) :
    # Grab an image    
    if (zed.grab() == sl.ERROR_CODE.SUCCESS) :
         # A new image is available if grab() returns SUCCESS        
         zed.retrieve_image(image, sl.VIEW.LEFT) 
         # Get the left image        
         zed.retrieve_measure(depth, sl.MEASURE.DEPTH) 
         # Retrieve depth Mat. Depth is aligned on the left image
         zed.retrieve_measure(point_cloud, sl.MEASURE.XYZRGBA)          
         # Retrieve colored point cloud. Point cloud is aligned on the left image     
         i = i + 1

现在我们已经获得了深度地图,我们可能想要获得某一的像素点的深度。在本例中,我们获取图片中央的深度。深度有以下几种:

  • DEPTH (Y) 存储类型为:sl.MAT_TYPE.F32_C1
  • XYZ (X, Y, Z, not used) 存储类型为:sl.MAT_TYPE.F32_C4 (最后一位表示用32位来存储RGBA信息,解码为usigned char[4])
  • XYZABGR (X, Y, Z, color) 存储类型为:sl.MAT_TYPE.F32_C4
# Get and print distance value in mm at the center of the image
# We measure the distance camera - object using Euclidean distance
x = image.get_width() / 2
y = image.get_height() / 2
point_cloud_value = point_cloud.get_value(x, y)[1]
distance = math.sqrt(point_cloud_value[0]*point_cloud_value[0] + point_cloud_value[1]*point_cloud_value[1] + point_cloud_value[2]*point_cloud_value[2])
print("Distance to Camera at (", x, y, "): ", distance, "mm")

当循环50次后,关闭摄像头。

# Close the camera
zed.close()
  • 4
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
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相机对象,并设置了相机的分辨率和帧率。然后,我们打开相机,并创建了深度图像对象和双目图像对象。接下来,我们获取了立体匹配参数,并开始循环捕获图像并进行立体匹配。最后,我们关闭了相机。 请注意,这只是一个简单的示例代码,你可以根据自己的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值