Каков выходной формат датчика камеры CARLA rgb? - PullRequest
1 голос
/ 10 апреля 2020

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

1 Ответ

1 голос
/ 14 апреля 2020

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

API C ++ передает boost::shared_ptr<carla::sensor::SensorData> обратному вызову датчика, который является базовым классом для всех типов данных датчика (изображения, облака точек и т. Д. c.). В отличие от Python, C ++ API не понижает автоматически до указанного типа c, это дополнительный шаг, который вы должны сделать. Для камер следует уменьшить значение до 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 вместе с некоторыми удобными преобразователями цвета на случай, если вы хотите создать преобразованный цвет, например, для раскрашивания сегментированных изображений semanti c. Это очень полезно для отображения изображений в более удобных для человека цветах без изменения исходного изображения или создания копий.

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);
...