Камера Basler и DIPlib - PullRequest
       26

Камера Basler и DIPlib

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

Как преобразовать изображение Pylon (из библиотеки камер Basler) в изображение DIPlib на языке C ++?

Приведенный ниже код иллюстрирует, как преобразовать изображение Pylon в изображение OpenCV:

// Convert the grabbed buffer to a pylon image.
formatConverter.Convert(pylonImage, ptrGrabResult);

// Create an OpenCV image from a pylon image.
openCvImage = cv::Mat(ptrGrabResult->GetHeight(), ptrGrabResult->GetWidth(), CV_8UC3, (uint8_t *)pylonImage.GetBuffer());
cvtColor(openCvImage, openCvImage, COLOR_BGR2GRAY);

1 Ответ

0 голосов
/ 22 апреля 2020

Я искал в Интернете документацию для Pylon API, но не смог ее найти. Тем не менее, используя приведенный вами пример для OpenCV, в DIPlib легко сделать эквивалент:

dip::Image image(
   NonOwnedRefToDataSegment(pylonImage.GetBuffer()), // a random, non-owning pointer
   pylonImage.GetBuffer(),          // data
   dip::DT_UINT8,                   // pixel type (8-bit unsigned)
   { ptrGrabResult->GetWidth(),
     ptrGrabResult->GetHeight() },  // width and heigh
   {},                              // this one can stay empty
   dip::Tensor{3}                   // 3 channels
);
image.SetColorSpace("RGB");

См. Документацию к этому конструктору , а также этому разделу документация DIPlib для получения более подробной информации.


Обновление DIPlib до текущей главной ветки (я только что нажал это изменение ), приведенное выше упрощается до:

dip::Image image(
   static_cast<uint8_t*>(pylonImage.GetBuffer()) // data pointer
   { ptrGrabResult->GetWidth(),
     ptrGrabResult->GetHeight() },               // width and heigh
   3                                             // 3 channels
);
image.SetColorSpace("RGB");
...