0
votes

Intro: I am trying to write a program which connects to a FLIR AX5(GigE Vision) camera and then save images after regular intervals to a pre-specified location on my PC. These images must be 14bit which contains the temperature information. Later I need to process these images using openCV to get some meaningful results from obtained temperature data.

Current Position: I can save image at regular interval but the image which I am getting doesn't contain 14 bit data but 8 bit data instead. This even after I change the PixelFormat to 14 bit, CMOS and LVDT bit depths to 14 bit. I checked the resulting .bin file in matlab and found that the max pixel value is 255 which means image is being stored in 8 bit format. I am using the sample code provided by eBus SDK to do this job. In this code I have made some changes as per my requirement.

Please help in saving the image in the raw format from which I can read the temperature data. P.S. Relevant code is here.

            // 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

1 Answers

0
votes

Be sure that the streaming is configured for 14 bits stream.

Before create PvStream you have to set PixelFormat to 14 bits. If you PvDevice object it's called _pvDevice:

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