ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Этот ответ действителен в соответствии с 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);