2010-03-11 161 views
30

是否有Pythonic解決方案來讀取和處理RAW圖像。即使它只是訪問一個原始的照片文件(例如,cr2或dng),然後將其輸出爲JPEG格式。Python中的RAW圖像處理

理想情況下,一個用於python的dcraw綁定,但其他任何可以完成的東西也是足夠的。

回答

0

我不確定Python Imaging Imaging Library(PIL http://www.pythonware.com/products/pil/)中的RAW支持有多廣泛,但您可能想檢查一下。

否則,你可以直接調用dcraw,因爲它已經很好地解決了這個問題。

+0

PIL不做RAW(至少不是CR2或DCR)。 – Seth 2010-10-02 03:58:39

4

我寫了一個純python庫,最近名爲rawphoto用於處理python中的原始圖像。目前它只支持佳能CR2文件(我很快就會加入尼康格式)。它也在PyPi。如果您訪問CR2文件,可能對您有所幫助。提取JPEG預覽圖像的

實施例:

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

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類如添加更多,這將包裝任何類型的原始文件的:這已被替換爲rawkit,基於ctypes的libraw綁定。 RawKit將會更好地工作,您應該使用它(rawphoto現在將被棄用,並被用作教育工具)。

+0

此代碼對我無效。我安裝了軟件包,但得到了以下錯誤:AttributeError:'Cr2'對象沒有屬性'get_quarter_size_rgb' – Jonny 2015-03-08 19:25:46

+0

自從我寫這個答案以來,API已經全部改變了。檢查Cr2類中的代碼(或者查看更一般的Raw類)。 – 2015-03-08 19:26:38

+0

也許你可以更新答案呢? – Jonny 2015-03-08 19:27:44

10

前一段時間我寫了一個名爲rawpy的libraw/dcraw包裝器。這是很容易使用:

import rawpy 
import imageio 

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

它與numpy的陣列原生支持,並支持大量的選項,包括直接訪問未經處理的拜爾數據。

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擴展。 – 2017-08-01 08:56:41

+0

謝謝,修正了錯字。 – 2017-08-02 13:02:06