2016-05-12 5 views
0

Intro: Ich versuche ein Programm zu schreiben, das an eine FLIR AX5 (GigE Vision) Kamera anschließt und dann Bilder nach regelmäßigen Intervallen an einem vorher festgelegten Ort speichert auf meinem PC. Diese Bilder müssen 14 Bit sein, welches die Temperaturinformation enthält. Später muss ich diese Bilder mit openCV verarbeiten, um aussagekräftige Ergebnisse aus den erhaltenen Temperaturdaten zu erhalten.So speichern Sie ein Bild von einer FLIR AX5 Kamera in ein Rohformat mit eBus sdk

Aktuelle Position: Ich kann Bild in regelmäßigen Abständen speichern, aber das Bild, das ich bekomme, enthält keine 14-Bit-Daten, sondern 8-Bit-Daten statt. Dies auch, nachdem ich das PixelFormat auf 14 Bit, CMOS und LVDT Bittiefen auf 14 Bit ändere. Ich habe die resultierende .bin-Datei in Matlab überprüft und festgestellt, dass der maximale Pixelwert 255 ist, was bedeutet, dass das Bild im 8-Bit-Format gespeichert wird. Ich verwende den Beispielcode, der von eBus SDK bereitgestellt wird, um diese Aufgabe zu erledigen. In diesem Code habe ich einige Änderungen gemäß meiner Anforderung vorgenommen.

Bitte helfen Sie beim Speichern des Bildes im Rohformat, aus dem ich die Temperaturdaten lesen kann. P.S. Relevanter Code ist hier.

  // 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); 
       } 

Antwort

0

Seien Sie sicher, dass das Streaming für 14 Bit-Stream konfiguriert ist.

Bevor Sie PvStream erstellen, müssen Sie PixelFormat auf 14 Bits setzen. Wenn Sie ein PvDevice-Objekt haben, heißt es _pvDevice:

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