如何使用eBus sdk将FLIR AX5相机的图像保存为原始格式

时间:2016-05-12 13:22:47

标签: image save gige-sdk flir

简介:我正在尝试编写一个连接到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);
                }

1 个答案:

答案 0 :(得分:0)

确保将流配置为14位流。

在创建PvStream之前,您必须将PixelFormat设置为14位。如果你的PvDevice对象叫做_pvDevice:

_pvDevice->GetParameters()->SetEnumValue("PixelFormat", PvPixelMono14);
_pvDevice->GetParameters()->SetEnumValue("DigitalOutput", 3);