图像API概述

AirSim的图像API允许用户从虚拟相机捕获图像数据,支持多种图像类型(如场景、深度、分割等)。通过Python客户端库调用API,可获取图像并处理。

安装与初始化

确保已安装AirSim和Python客户端库,通过pip install airsim安装。初始化Python客户端:

import airsim  
client = airsim.MultirotorClient()  
client.confirmConnection()  

获取单张图像

使用simGetImage函数指定相机名称和图像类型。例如捕获场景视图:

image_type = airsim.ImageType.Scene  
camera_name = "0"  
image = client.simGetImage(camera_name, image_type)  

图像以二进制格式返回,需用OpenCV等库解码:

import cv2  
import numpy as np  
png_data = np.frombuffer(image, dtype=np.uint8)  
decoded_image = cv2.imdecode(png_data, cv2.IMREAD_COLOR)  

批量获取图像

通过simGetImages一次性请求多类图像:

requests = [  
    airsim.ImageRequest("0", airsim.ImageType.DepthVis),  
    airsim.ImageRequest("0", airsim.ImageType.Segmentation)  
]  
responses = client.simGetImages(requests)  

处理返回的响应列表时,需根据ImageType分别解码。

图像类型与参数

常用图像类型:

  • Scene:普通RGB图像。
  • DepthVis:可视化深度图(灰度或伪彩色)。
  • Segmentation:语义分割图(对象类别以颜色编码)。
  • SurfaceNormals:表面法线图。

调整图像分辨率与参数需在settings.json中配置相机参数:

"Cameras": {  
    "0": {  
        "CaptureSettings": [  
            { "Width": 640, "Height": 480, "FOV_Degrees": 90 }  
        ]  
    }  
}  

保存与可视化

使用OpenCV保存图像:

cv2.imwrite("scene.png", decoded_image)  

深度图需归一化处理:

depth_data = np.frombuffer(responses[0].image_data_uint8, dtype=np.uint8)  
depth_img = cv2.imdecode(depth_data, cv2.IMREAD_UNCHANGED)  
depth_normalized = cv2.normalize(depth_img, None, 0, 255, cv2.NORM_MINMAX)  

注意事项

  • 图像类型需与相机支持的类型匹配。
  • 高分辨率图像可能影响性能,需权衡质量与帧率。
  • 语义分割图需在设置中启用"Segmentation"标签。

通过上述方法,可灵活捕获并处理AirSim中的各类图像数据,适用于计算机视觉仿真任务。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐