2010-03-11 25 views
30

Gibt es Pythonic-Lösungen zum Lesen und Verarbeiten von RAW-Bildern? Auch wenn man einfach auf eine Rohbilddatei (zB cr2 oder dng) zugreift und diese dann als jpeg ausgibt.RAW Bildverarbeitung in Python

Idealerweise wäre eine dcraw-Bindung für Python, aber alles andere, was die came erreichen könnte, wäre auch ausreichend.

Antwort

0

Ich bin mir nicht sicher, wie umfangreich die RAW-Unterstützung in Python Imaging Library (PIL http://www.pythonware.com/products/pil/) ist, aber Sie sollten das überprüfen.

Andernfalls könnten Sie einfach dcraw direkt aufrufen, da es dieses Problem bereits gut löst.

+0

PIL macht keine RAWs (zumindest keine CR2s oder DCRs). – Seth

4

Ich schrieb eine reine Python-Bibliothek kürzlich rawphoto für die Verarbeitung von Rohbildern in Python. Derzeit unterstützt es nur Canon CR2-Dateien (ich werde hoffentlich bald Nikon-Formate hinzufügen). Es ist auch auf PyPi. Es kann hilfreich sein, wenn Sie auf CR2-Dateien zugreifen.

Beispiel das JPEG-Vorschaubild zu extrahieren:

from rawphoto.cr2 import Cr2 

blob = Cr2(filename="somefile.CR2").get_quarter_size_rgb() 

# Do something with the JPEG here... eg. save it: 
with open("output.jpeg", 'wb' as f: 
    f.write(blob) 

oder unter Verwendung der generische Raw Klasse, die jede Art von RAW-Datei wickeln wird, wie ich mehr hinzuzufügen:

from rawphoto.raw import Raw 

# The API here will probably change before the 1.0 release. 
blob = Raw(filename="somefile.CR2").fhandle.get_quarter_size_rgb() 

# Do something with the JPEG here... eg. save it: 
with open("output.jpeg", 'wb' as f: 
    f.write(blob) 

EDIT: Dies wurde durch rawkit, ctypes basierte libraw Bindings ersetzt. RawKit wird viel besser funktionieren und Sie sollten es stattdessen verwenden (Rawphoto wird jetzt veraltet sein und nur als Lehrmittel verwendet werden).

+0

Dieser Code funktioniert nicht für mich. Ich habe das Paket installiert, bekomme aber den Fehler: AttributeError: 'Cr2' Objekt hat kein Attribut 'get_quarter_size_rgb' – Jonny

+0

Die APIs haben sich alle geändert, seit ich diese Antwort geschrieben habe. Überprüfen Sie den Code in der Klasse Cr2 (oder schauen Sie sich die allgemeinere Klasse 'Raw' an). –

+0

Vielleicht können Sie die Antwort dann aktualisieren? – Jonny

10

Vor einer Weile schrieb ich eine libraw/dcraw Wrapper namens rawpy. Es ist ganz einfach zu bedienen:

import rawpy 
import imageio 

raw = rawpy.imread('image.nef') 
rgb = raw.postprocess() 
imageio.imsave('default.tiff', rgb) 

es nativ mit numpy Arrays arbeitet und unterstützt eine Vielzahl von Optionen, einschließlich der direkten Zugang zu den nicht verarbeiteten Bayer Daten.

2

Hier ist ein Weg, ein Kanon CR2 Bild zu einem freundlichen Format mit rawkit, die mit ihrer aktuellen Implementierung arbeitet zu konvertieren:

import numpy as np 

from PIL import Image 
from rawkit.raw import Raw 

filename = '/path/to/your/image.cr2' 
raw_image = Raw(filename) 
buffered_image = np.array(raw_image.to_buffer()) 
image = Image.frombytes('RGB', (raw_image.metadata.width, raw_image.metadata.height), buffered_image) 
image.save('/path/to/your/new/image.png', format='png') 

Mit einem numpy Array ist hier nicht sehr elegant, aber zumindest funktioniert es, Ich konnte mir nicht vorstellen, wie man PIL-Konstruktoren benutzt, um dasselbe zu erreichen.

+0

Sie speichern JPEG-Format in eine Datei mit Png-Erweiterung. –

+0

Danke, repariere den Tippfehler. –