Какой выходной формат датчика камеры CARLA rgb

Я вижу много примеров Python для камеры RGB. Но не могу найти пример C++ для вывода камеры rgb. Как данные хранятся в данных обратного вызова датчика камеры CARLA RGB? Можно получить вывод данных, прочитав код, но подумал, что кто-то, возможно, уже декодировал вывод камеры, используя что-то вроде ускоренного просмотра.

1 ответ

Решение

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: этот ответ действителен в соответствии с 0.9.8, имейте в виду, что C++ API CARLA все еще находится в разработке и часто меняется, в случае сомнений проверьте исходный код или их справочник по C++.

C++ API передает 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);
Другие вопросы по тегам