2017-12-15 12 views
0

Wir verwenden OpenCV auf Linux zum Lesen und Verarbeiten von regulären 8-Bit-JPGs.Möglichkeit, 12-Bit-jpg unter Linux zu konvertieren

Wir erhalten jetzt 12-Bit-JPGs von einer bestimmten Hardware. OpenCV kann diese weder lesen noch kann ich etwas anderes ausprobieren. Gibt es ein Dienstprogramm oder eine Bibliothek für Linux, mit denen wir diese verarbeiten könnten? Vielleicht in ein 8-Bit-Format konvertieren?

Die neueste libjpeg unterstützt 12-Bit-JPG als Kompilierzeitoption. Das bedeutet, dass es nicht einfach ist, Software zu schreiben, die reguläres 8-Bit- und 12-Bit-JPG gleichzeitig unterstützt. Aber ich frage mich, ob jemand das schon gelöst hat.

+0

Vielleicht imagick: konvertieren orig.jpg -depth 8 output.jpg – tcpack4

+0

Setzen Sie 'CV_LOAD_IMAGE_ANYDEPTH' beim Laden von Bildern? – emcconville

+0

convert sagt "convert.im6: Nicht unterstützte JPEG Daten Genauigkeit 12' cam0_000000_0.jpg '@ error/jpeg.c/JPEGErrorHandler/316. " Dies ist mit der Q16 (16-Bit) Version von Bildmagie. – Philip

Antwort

1

Ich habe ein paar Verbesserungen zu Ihrer vorgeschlagenen Technik.

Zum einen können Sie Ihren Prozess vereinfachen und die Notwendigkeit entfernen zu installieren und auf ImageMagick indem djpeg emittieren eine PPM Datei angewiesen sein, weil OpenCV sie trotzdem ohne Bibliotheken lesen kann. So würde Ihr Befehl werden:

djpeg > result.ppm < some12bitBadBoy.jpg 

Zweitens, wenn Sie das tun, Sie bekommen tatsächlich eine 12/16 Bit PPM Datei, so dass Sie mehr Farbauflösung in den Prozess behalten!

identify -verbose result.ppm 

Image: a.ppm 
    Format: PPM (Portable pixmap format (color)) 
    Mime type: image/x-portable-pixmap 
    Class: DirectClass 
    Geometry: 227x149+0+0 
    Units: Undefined 
    Type: TrueColor 
    Endianess: Undefined 
    Colorspace: sRGB 
    Depth: 12-bit     <--- 
    Channel depth: 
    Red: 12-bit     <--- 
    Green: 12-bit     <--- 
    Blue: 12-bit     <--- 
    Channel statistics: 
    Pixels: 33823 
    Red: 
     min: 514 (0.125519) 
     max: 4095 (1) 
     mean: 2350.62 (0.574022) 
     standard deviation: 1102.04 (0.269119) 
     kurtosis: -1.39076 
     skewness: 0.13609 
     entropy: 0.971255 
    Green: 
     min: 305 (0.0744811) 
     max: 4095 (1) 
     mean: 1453.69 (0.354991) 
     standard deviation: 852.147 (0.208095) 
     kurtosis: 2.42348 
     skewness: 1.77043 
     entropy: 0.918006 
    Blue: 
     min: 213 (0.0520147) 
     max: 4095 (1) 
     mean: 1309.16 (0.319698) 
     standard deviation: 890.453 (0.217449) 
     kurtosis: 2.74961 
     skewness: 1.92239 
... 
... 

Für alle anderen ein schwer erreichbares 12-Bit JPEG zu finden versuchen, Ich fand schließlich ein here.


Ein weiterer Vorschlag, Ihren Workflow zu vereinfachen, könnte seine inotify (man page) zu verwenden Dateisystem Ereignisse auf dem Bildspeicherbereich zu überwachen. So könnten Sie effektiv benachrichtigt werden, wenn neue JPEGs zur Analyse ankommen, dann könnten Sie automatisch prüfen, ob 12-Bit und eine entsprechende PPM Datei mit dem obigen Verfahren generieren und das 12-Bit-JPEG auf einen anderen Haltebereich auf der Festplatte verschieben muss darauf zurückkommen.

Wenn Sie Macs verwenden, ist das Äquivalent fswatch, das mit homebrew installiert werden kann.

+0

Noch erfordert die Kompilierung eines 12-Bit-libjpeg, die ich vermeiden wollte, aber Einblick hier über PPM ist gültig und nützlich. Akzeptiert. – Philip

+0

Tut mir leid, ich konnte mir nichts direkteres einfallen lassen - ich werde es mir merken, wenn ich im Netz herumlaufe und dich anpinge, wenn mir etwas Besseres einfällt. Viel Glück mit Ihrem Projekt! –

Verwandte Themen