はじめに: FLIR AX5 (GigE Vision) カメラに接続し、定期的に画像を PC の事前に指定した場所に保存するプログラムを作成しようとしています。これらの画像は、温度情報を含む 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);
}