2

我看到许多用于 RGB 相机的 python 示例。但找不到任何用于 rgb 相机输出的 C++ 示例。CARLA RGB Camera Sensor的回调数据中的数据是如何存储的?可以通过读取代码来获取数据输出 - 但认为有人可能已经使用 boost view 之类的东西解码了相机输出。

4

1 回答 1

2

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

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

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

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,但是如果使用它,您需要链接到 boost_filesystem、libpng、libjpeg 和 libtiff。所以我会避免包括这个,除非你真的需要它。

ImageIO::WriteView("image.png", colorized);
于 2020-04-14T14:17:49.227 回答