2010-03-11 2 views
30

Есть ли какие-либо решения Pythonic для чтения и обработки изображений RAW. Даже если он просто обращается к необработанному файлу фотографии (например, cr2 или dng), а затем выводит его как jpeg.RAW Обработка изображений в Python

В идеале привязки dcraw для python, но все, что может выполнить пришедшее, было бы достаточно.

ответ

0

Я не уверен, насколько обширна поддержка RAW в библиотеке изображений Python (PIL http://www.pythonware.com/products/pil/), но вы можете проверить это.

В противном случае вы можете просто вызвать dcraw напрямую, так как он уже хорошо решает эту проблему.

+0

PIL не делает RAW (по крайней мере, не CR2 или DCR). – Seth

4

Я написал библиотеку с чистым питоном, недавно названную rawphoto для обработки необработанных изображений в python. В настоящее время он поддерживает только файлы Canon CR2 (я скоро буду добавлять форматы Nikon). Это также на PyPi. Это может быть полезно для вас, если вы получаете доступ к файлам CR2.

Пример извлечения предварительного просмотра изображения JPEG:

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) 

или, используя общий Raw класс, который будет обернуть любой тип сырья файл, как я могу добавить больше:

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: Это было заменено rawkit, привязками libraw на основе ctypes. RawKit будет работать намного лучше, и вы должны использовать его вместо этого (rawphoto теперь будет устаревшим и просто используется в качестве учебного инструмента).

+0

Этот код не работает для меня. Я установил пакет, но получим ошибку: AttributeError: объект «Cr2» не имеет атрибута «get_quarter_size_rgb» – Jonny

+0

Все API-интерфейсы изменились с тех пор, как я написал этот ответ. Проверьте код в классе Cr2 (или посмотрите на более общий класс 'Raw'). –

+0

Может быть, вы можете обновить ответ? – Jonny

10

Некоторое время назад я написал обертку libraw/dcraw под названием rawpy. Это очень просто в использовании:

import rawpy 
import imageio 

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

Он работает изначально с Numpy массивами и поддерживает множество опций, включая прямой доступ к необработанным данным Bayer.

2

Вот способ преобразовать канон CR2 изображения в удобном формате с rawkit, который работает с текущей реализации:

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') 

Использование Numpy массива не очень элегантный здесь, но по крайней мере это работает, Я не мог понять, как использовать конструкторы PIL для достижения того же.

+0

Вы сохраняете формат jpeg в файл с расширением png. –

+0

Спасибо, исправлена ​​опечатка. –

Смежные вопросы