Подтвердить что ты не робот

Обработка RAW-изображений в Python

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

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

4b9b3361

Ответ 1

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

import rawpy
import imageio

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

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

Ответ 3

Я написал библиотеку pure-python, недавно называемую 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 теперь будет устаревшим и просто используется в качестве учебного инструмента).

Ответ 4

Вот способ конвертировать изображение канона 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 для достижения того же.

Ответ 6

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

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