CARLA rgb相机传感器的输出格式是什么

What is the output format of CARLA rgb camera sensor

我看到很多 python RGB 相机的例子。但是找不到 rgb 相机输出的任何 C++ 示例。 CARLA RGB Camera Sensor的回调数据中数据是如何存储的?可以通过阅读代码来获取数据输出——但认为有人可能已经使用诸如增强视图之类的方法解码了相机输出。

免责声明:此答案根据 0.9.8 有效,请记住 CARLA 的 C++ API 仍在开发中并且经常更改,如有疑问请查看源代码或者他们的 C++ Reference.

C++ API 将 boost::shared_ptr<carla::sensor::SensorData> 传递给传感器回调,这是所有传感器数据类型(图像、点云等)的基础 class。与 Python 不同,C++ API 不会自动向下转换为特定类型,这是您必须执行的额外步骤。对于相机,您应该向下转换为 carla::sensor::data::ImageImageTmpl<Color> 的别名)

camera->Listen([](auto data) {
    auto image = boost::dynamic_pointer_cast<carla::sensor::data::Image>(data);
    assert(image != nullptr);
    parseImage(image);
});

这张图片可以用作像素数组

for (auto& pixel : *image)
{
    std::cout << pixel.r << ", " << pixel.g << ", " << pixel.b << "\n";
}

或者,如果您更喜欢直接访问缓冲区,请使用 image->data(),它在内存中的布局是 BGRA。

carla::image::ImageView 中还提供了到 Boost GIL 视图的转换,以及一些方便的颜色转换器,以防您想要创建颜色转换视图,例如为语义分割图像着色。这对于在不修改原始图像或制作副本的情况下以更人性化的颜色显示图像非常有用。

using namespace carla::image;

// Boost GIL image view.
auto view = ImageView::MakeView(*image);

// View semantic segmentation as CityScapes color palette.
auto colorized = ImageView::MakeColorConvertedView(view, ColorConverter::CityScapesPalette{});

最后,该视图可以使用 ImageIO 保存到磁盘,但是如果使用它,您需要 link 反对 boost_filesystem、libpng、libjpeg 和 libtiff。所以我会避免包括这个,除非你真的需要它。

ImageIO::WriteView("image.png", colorized);