You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Carla中Camera.listen()输出异常:图像帧叠加问题求助

Carla RGB传感器采集图像出现多帧叠加问题的解决方法

问题描述

为车辆挂载RGB传感器后,采集到的图像并非单帧清晰画面,而是呈现多帧叠加的异常效果,即使尝试使用Pillow的save方法或自定义保存函数也无法解决。

问题代码

import carla
import random
import time
from PIL import Image


# 连接客户端并获取世界对象
client = carla.Client('localhost', 2000)
world = client.get_world()
spectator = world.get_spectator()
getLocation = spectator.get_transform()

# 设置 spectator 为空变换
spectator.set_transform(carla.Transform())

# 获取蓝图库并筛选车辆蓝图
vehicle_blueprints = world.get_blueprint_library().filter('*vehicle*')

# 获取地图的生成点
spawn_points = world.get_map().get_spawn_points()

# 随机生成50辆车辆
for _ in range(50):
    world.try_spawn_actor(random.choice(vehicle_blueprints), random.choice(spawn_points))

# 生成 ego 车辆
ego_vehicle = world.spawn_actor(random.choice(vehicle_blueprints), random.choice(spawn_points))

# 创建相机挂载在车辆顶部的变换
camera_init_trans = carla.Transform(carla.Location(z=4))

# 获取RGB相机蓝图
camera_bp = world.get_blueprint_library().find('sensor.camera.rgb')

# 生成相机并挂载到ego车辆
camera = world.spawn_actor(camera_bp, camera_init_trans, attach_to=ego_vehicle)

# 问题出在此处的回调逻辑
camera.listen(lambda image: image.save_to_disk('out/%06d.png' % image.frame))

EgoLocation = ego_vehicle.get_location()

# 设置所有车辆自动驾驶
for vehicle in world.get_actors().filter('*vehicle*'):
    vehicle.set_autopilot(True)

# 将 spectator 移动到 ego 车辆位置
spectator.set_transform(carla.Transform(EgoLocation))
time.sleep(10)
camera.stop()

问题原因

Carla传感器回调中传入的image对象是复用内存空间的,若回调函数未立即处理图像数据,后续帧会覆盖当前帧的内存,最终导致保存的图像出现多帧叠加的混乱效果。lambda的简洁写法容易忽略这个内存复用的底层细节。

解决方案

替换lambda回调为明确的处理逻辑,先创建图像副本再保存,避免原内存被后续帧覆盖:

方案1:使用独立函数处理

def save_image(image):
    # 创建图像副本,独立于原内存空间
    img_copy = image.copy()
    img_copy.save_to_disk('out/%06d.png' % img_copy.frame)

# 注册修改后的回调函数
camera.listen(save_image)

方案2:链式调用简化写法

camera.listen(lambda image: image.copy().save_to_disk('out/%06d.png' % image.frame))

验证效果

修改后重新运行代码,采集到的图像将恢复为单帧清晰画面,与Carla文档预期一致。

内容的提问来源于stack exchange,提问作者ooCrafty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:43:15