Python中的RAW图像处理

49

有没有Pythonic的解决方案可以读取和处理原始图像。 即使只是访问原始照片文件(例如cr2或dng),然后将其输出为jpeg格式也可以。

理想情况下,Python应该有一个dcraw绑定,但任何其他能够实现同样功能的方法也足够了。

6个回答

29

不久前,我写了一个名为rawpy的libraw/dcraw包装器。使用起来非常简单:

import rawpy
import imageio

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

它可以原生地与numpy数组一起使用,并支持许多选项,包括直接访问未经处理的Bayer数据。


可以导入原始数据并导出原始数据吗? - Marc

8

6
这是一种使用 rawkit 将佳能 CR2 图像转换为友好格式的方法,该方法适用于其当前实现:
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构造函数来实现相同的效果。


你正在将jpeg格式保存到一个扩展名为png的文件中。 - Aleksandar Jovanovic
谢谢,已经修复了拼写错误。 - Thomas Cassou
rawkit不支持libraw 0.19+,这是Ubuntu的默认版本... - Dubrzr

1

0

我不确定Python Imaging Library (PIL http://www.pythonware.com/products/pil/)中的RAW支持有多全面,但您可以去查一下。

否则,您可以直接调用dcraw,因为它已经很好地解决了这个问题。


PIL不支持RAW格式(至少不支持CR2或DCR格式)。 - Seth

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接