Wie man eine .RAW-Datei mit einem bizarren, benutzerdefinierten Header öffnet

1096
Seanny123

Ich habe eine bizarre .raw-Datei im folgenden Format, die ich für ein Klassenprojekt öffnen muss. Es hat die folgende Struktur am Beispiel eines 487x414-Fotos:

  • Die Anzahl der Zeilen beträgt zwei nicht signierte Bytes (01E7).
  • Die Anzahl der Spalten beträgt zwei nicht signierte Bytes (019E).
  • Die Anzahl der Bits, die jedes Pixel darstellen (dies sind immer 8)
  • Die tatsächlichen Bilddaten

Das Projekt soll die Flankenerkennung für die .raw-Datei ausführen, aber der Professor sagte, ich sollte sie mit einer beliebigen Bildbearbeitungssoftware öffnen können (anscheinend erwartet er, dass ich ein Fenster mit der Anzahl der Bytes einstelle) die Kopfzeile), also habe ich folgendes versucht:

  • Paint.net
  • Photoshop-Elemente
  • Adobe Lightroom
  • ImageMagick
  • Gimp
  • DCRaw

Ich bin Ubuntu und Windows dual booten. Wenn also jemand eine Idee hat, wie ich diese Datei anzeigen kann, versuche ich, sie als Histogramm in OpenCV zu laden, aber ich hätte gerne etwas, um mein Ergebnis zu überprüfen dagegen) wäre es sehr dankbar.

0
Versuchen Sie es mit ufraw. Ich verwende es, um Rohdateien von meiner Kamera (Nikon) zu bearbeiten, und soweit ich weiß, unterstützt es die meisten anderen Formate. Muss einen Versuch wert sein. Holloway vor 9 Jahren 0
Ich habe es versucht, aber leider hat es nicht funktioniert. Vielen Dank, dass Sie mich an diese unbeantwortete Frage erinnert haben. Seanny123 vor 9 Jahren 0

1 Antwort auf die Frage

0
Seanny123

Am Ende musste ich ein benutzerdefiniertes Python-Skript schreiben, das Sie hier finden können . Hier ist der wichtige Teil.

#Load the raw file f = open(filename,'rb') # switch to command line args later #Because the byte order is weird a = f.read(1) b = f.read(1) #First line is rows rows = int((b+a).encode('hex'), 16) a = f.read(1) b = f.read(1) #Second line is columns cols = int((b+a).encode('hex'), 16) #Last byte is encoding, but we're just going to ignore it f.read(1) #And everything else is 8 bit encoded, so let's load it into numpy and display it with matplotlib bin_image = np.fromstring(f.read(), dtype=np.uint8) #Change the shape of the array to the actual shape of the picture bin_image.shape = (cols, rows)  fig = pylab.figure() #Display the original image fig.add_subplot(1,4,1) pylab.imshow(bin_image, cmap=cm.gray) 
Wenn dies funktioniert hat, markieren Sie es als akzeptiert, um diese Frage von unbeantwortet zu entfernen. Holloway vor 9 Jahren 0