Author Topic: FLIR A65X Saving image in raw format using eBUS SDK  (Read 4932 times)

0 Members and 1 Guest are viewing this topic.

Offline khedar

  • Newbie
  • Posts: 4
  • Country: de
FLIR A65X Saving image in raw format using eBUS SDK
« on: May 12, 2016, 02:58:39 pm »
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.

As of now 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.

Code: [Select]
// 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);
                }

khedar
 

Offline tomas123

  • Frequent Contributor
  • **
  • Posts: 832
  • Country: de
Re: FLIR A65X Saving image in raw format using eBUS SDK
« Reply #1 on: May 12, 2016, 08:37:06 pm »
this is a another 14 Bit Flir format, as described in this Forum (Flir *.fff and Flir radiometric *.jpg)

GenICam protocol
see attachment

but on page 16, I see the old Flir formula  :-+
"Temperature (in Kelvin) = B / log(R / (S - O) + F), where S is the 14-bit digital signal value. log(x) is the base-e logarithm of the x parameter"

further information for this formula see here (look for RAW2Temp.xls):
https://www.eevblog.com/forum/thermal-imaging/flir-e4-thermal-imaging-camera-teardown/msg342072/#msg342072

Offline khedar

  • Newbie
  • Posts: 4
  • Country: de
Re: FLIR A65X Saving image in raw format using eBUS SDK
« Reply #2 on: May 14, 2016, 12:23:33 am »
Hi Tomas, Thanks for the links. I have skimmed through the thread and it has lots of great information.
   Coming to the problem I was facing. It seems that the function "Store" PvBufferwriter was by default saving the files in 8 bit format. Found this in the header declaration.

Code: [Select]
    PvResult Store( PvBuffer* aBuffer, const PvString& aFilename, PvBufferFormatType aType = PvBufferFormatBMP, uint32_t *aBytesWritten = NULL );
from PvBufferWriter.h file.

I have written a new function to write the raw sensor values to a binary file based on the example from GEV 1.9 source code.
Code: [Select]
void SaveAsRaw(PvBuffer *lBuffer, uint32_t lSize, char* lFilename)
{
    const uint8_t* lSource=lBuffer->GetDataPointer();
    std::ofstream file(lFilename,std::ofstream::binary);
    file.write(reinterpret_cast<const char *>(lSource), lSize);
    file.close();
}
But I am yet to test this as I won't have access to the camera until this Thursday (Excursion Woche   :( ). Once this works will then try to store in .fff format since that header file also is available in GEV source code.
Lots of fun ahead.
I will try to keep my work posted on this thread so that it might help anyone else working on a similar problem.

khedar
 

Offline Chanc3

  • Frequent Contributor
  • **
  • Posts: 429
  • Country: gb
Re: FLIR A65X Saving image in raw format using eBUS SDK
« Reply #3 on: May 16, 2016, 08:51:09 pm »
Which A series camera is it? A655 or A65? Have you considered using a different sdk?


Sent from my iPad using Tapatalk
 

Offline khedar

  • Newbie
  • Posts: 4
  • Country: de
Re: FLIR A65X Saving image in raw format using eBUS SDK
« Reply #4 on: May 19, 2016, 11:01:28 am »
Hi Chanc3,
I have A65X model. FLIR recommends using eBUS SDK and I have found it be great. So at the moment I am going ahead with eBUS only. I am trying with the new function I wrote for saving the raw file will update later.

khedar
 

Offline khedar

  • Newbie
  • Posts: 4
  • Country: de
Re: FLIR A65X Saving image in raw format using eBUS SDK
« Reply #5 on: May 19, 2016, 11:16:03 am »
No I am still having the same problem. I am saving in the .raw format using the function as follows:
Code: [Select]
void SaveAsRaw(PvBuffer *lBuffer, uint32_t lSize, char* lFilename)
{
    const uint8_t* lSource=lBuffer->GetDataPointer();
    std::ofstream file(lFilename,std::ofstream::binary);
    file.write(reinterpret_cast<const char *>(lSource), lSize);
    file.close();
}
Is it that the getDataPointer() method returns a pointer to the 8 bit data that i am getting 8 bit data in the binary file which I am saving. Any ideas?

khedar
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf