簡體   English   中英

在python中讀取預處理的cr2 RAW圖像數據

[英]Reading pre-processed cr2 RAW image data in python

我正在嘗試從cr2(佳能原始圖像文件)讀取原始圖像數據。 如果可能的話,我只想讀取經過預處理的數據(無標頭等)(例如,拜耳/最原始的未處理數據)並將其存儲在numpy數組中。 我嘗試了很多庫,例如opencvrawkitrawpy但是似乎沒有任何正常工作。

關於我應該如何做的任何建議? 我應該用什么? 我已經嘗試了很多東西。

謝謝

由於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

然后, bayerbayer_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM