Python中的RAW图像处理

49 投票
6 回答
59887 浏览
提问于 2025-04-15 20:17

有没有什么简单的Python方法可以读取和处理RAW格式的图片?比如说,能够直接打开一个RAW照片文件(比如cr2或dng格式),然后把它转换成jpeg格式输出。

最好是有一个可以在Python中使用的dcraw库,不过其他任何能完成这个任务的方法也可以。

6 个回答

6

这里有一种方法,可以把佳能的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的构造函数来实现同样的效果。

8

ImageMagick 是一个支持 大多数RAW格式 的工具,并且提供了 Python接口

关于Python的dcraw接口:dcraw是用C语言写的,所以你可以通过 ctypes模块 来使用它。

29

不久前,我写了一个叫做 rawpy 的库,它是libraw/dcraw的一个封装。这个库使用起来非常简单:

import rawpy
import imageio

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

它可以直接和numpy数组一起使用,并且支持很多选项,包括可以直接访问未处理的Bayer数据。

撰写回答