简介:我正在尝试编写一个连接到FLIR AX5(GigE Vision)相机的程序,然后定期将图像保存到我PC上的预定位置。这些图像必须是14位,其中包含温度信息。后来我需要使用openCV处理这些图像,以从获得的温度数据中获得一些有意义的结果。
当前位置:我可以定期保存图像但是我得到的图像不包含14位数据而是包含8位数据。即使我将PixelFormat更改为14位,CMOS和LVDT位深度为14位。我在matlab中检查了生成的.bin文件,发现最大像素值为255,这意味着图像以8位格式存储。我正在使用eBus SDK提供的示例代码来完成这项工作。在这段代码中,我根据我的要求做了一些修改。
请帮助我以原始格式保存图像,从中可以读取温度数据。 附:相关代码在这里。
// 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);
}
答案 0 :(得分:0)
确保将流配置为14位流。
在创建PvStream之前,您必须将PixelFormat设置为14位。如果你的PvDevice对象叫做_pvDevice:
_pvDevice->GetParameters()->SetEnumValue("PixelFormat", PvPixelMono14);
_pvDevice->GetParameters()->SetEnumValue("DigitalOutput", 3);