Как сохранить изображение с камеры FLIR AX5 в сыром формате с помощью eBus SDK
Введение: я пытаюсь написать программу, которая подключается к камере FLIR AX5(GigE Vision), а затем через регулярные промежутки времени сохранять изображения в заранее указанном месте на моем ПК. Эти изображения должны быть 14 бит, которые содержат информацию о температуре. Позже мне нужно обработать эти изображения с использованием openCV, чтобы получить некоторые значимые результаты из полученных данных о температуре.
Текущая позиция: я могу сохранять изображение через регулярные промежутки времени, но полученное изображение не содержит 14-битных данных, а 8-битных данных. Это даже после того, как я изменил PixelFormat на 14 бит, CMOS и LVDT бит глубиной до 14 бит. Я проверил получившийся файл.bin в matlab и обнаружил, что максимальное значение пикселя равно 255, что означает, что изображение сохраняется в 8-битном формате. Я использую образец кода, предоставленный eBus SDK, чтобы сделать эту работу. В этом коде я внес некоторые изменения в соответствии с моим требованием.
Пожалуйста, помогите сохранить изображение в необработанном формате, из которого я могу прочитать данные о температуре. PS Соответствующий код здесь.
// If the buffer contains an image, display width and height.
uint32_t lWidth = 0, lHeight = 0;
lType = lBuffer->GetPayloadType();
cout << fixed << setprecision( 1 );
cout << lDoodle[ lDoodleIndex ];
cout << " BlockID: " << uppercase << hex << setfill( '0' ) << setw( 16 ) << lBuffer->GetBlockID();
if (lType == PvPayloadTypeImage)
{
// Get image specific buffer interface.
PvImage *lImage = lBuffer->GetImage();
// Read width, height.
lWidth = lImage->GetWidth();
lHeight = lImage->GetHeight();
cout << " W: " << dec << lWidth << " H: " << lHeight;
lBuffer->GetImage()->Alloc(lWidth, lHeight, lBuffer->GetImage()->GetPixelType());
if (lBuffer->GetBlockID()%50==0) {
char filename[]= IMAGE_SAVE_LOC;
std::string s=std::to_string(lBuffer->GetBlockID());
char const *schar=s.c_str();
strcat(filename, schar);
strcat(filename,".bin");
lBufferWriter.Store(lBuffer,filename);
}
1 ответ
Убедитесь, что потоковая передача настроена на 14-битный поток.
Перед созданием PvStream вы должны установить PixelFormat на 14 бит. Если вы PvDevice объект, он называется _pvDevice:
_pvDevice->GetParameters()->SetEnumValue("PixelFormat", PvPixelMono14);
_pvDevice->GetParameters()->SetEnumValue("DigitalOutput", 3);