[英]Reading pre-processed cr2 RAW image data in python
我正在嘗試從cr2(佳能原始圖像文件)讀取原始圖像數據。 如果可能的話,我只想讀取經過預處理的數據(無標頭等)(例如,拜耳/最原始的未處理數據)並將其存儲在numpy數組中。 我嘗試了很多庫,例如opencv
, rawkit
, rawpy
但是似乎沒有任何正常工作。
關於我應該如何做的任何建議? 我應該用什么? 我已經嘗試了很多東西。
謝謝
由於libraw / dcraw可以讀取cr2,因此應該很容易做到。 使用rawpy :
#!/usr/bin/env python
import rawpy
raw = rawpy.imread("/some/path.cr2")
bayer = raw.raw_image # with border
bayer_visible = raw.raw_image_visible # just visible area
然后, bayer
和bayer_visible
都是2D numpy數組。
您可以使用rawkit
來獲取此數據,但是,您將無法使用實際的rawkit
模塊(該模塊提供了用於處理Raw圖像的更高級別的API)。 相反,您將主要使用libraw
模塊,該模塊可讓您訪問基礎的LibRaw API。
很難確切地說出您要從該問題中得到什么,但是我將假設以下內容:原始拜耳數據,包括“蒙版”邊框像素(不會顯示,但用於計算圖像的各種相關信息) )。 類似於以下(未經測試)的腳本將使您能夠獲得所需的內容:
#!/usr/bin/env python
import ctypes
from rawkit.raw import Raw
with Raw(filename="some_file.CR2") as raw:
raw.unpack()
# For more information, see the LibRaw docs:
# http://www.libraw.org/docs/API-datastruct-eng.html#libraw_rawdata_t
rawdata = raw.data.contents.rawdata
data_size = rawdata.sizes.raw_height * rawdata.sizes.raw_width
data_pointer = ctypes.cast(
rawdata.raw_image,
ctypes.POINTER(ctypes.c_ushort * data_size)
)
data = data_pointer.contents
# Grab the first few pixels for demonstration purposes...
for i in range(5):
print('Pixel {}: {}'.format(i, data[i]))
我很有可能會誤解某些內容,並且大小變小了,在這種情況下,這最終會導致段錯誤,但這不是我以前試圖讓LibRaw做的事情。
在LibRaw論壇或LibRaw struct docs中 ,可以在此問題中找到更多信息。
我將其存儲在一個numpy數組中,作為練習的精簡版供用戶使用,或作為后續答案(我對numpy沒有任何經驗)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.