RAW图像详解及使用Python读取raw格式图像并显示
一、RAW圖像詳解
1.1 什么是raw格式圖像?
RAW在英文中的解釋是未處理的、自然狀態的,這也就是RAW文件的真諦。RAW圖像就是CMOS或者CCD圖像感應器將捕捉到
的光源信號轉化為數字信號的原始數據,因此RAW文件也被人們稱之為“數碼底片”。RAW格式的全稱是RAW Image Format,記
錄了由相機拍攝所產生的一些元數據,如ISO的設置、快門速度、光圈值、白平衡等信息。
1.2 RAW格式與JPG格式有什么差別?
如果一句話概括,那就是JPG格式實際上就是由RAW格式處理而來的。RAW格式記錄的是拍攝現場的原始數據,然后經過相機自身進行白平衡、銳化、飽和度、色彩等等處理之后,再進行封裝,就成為了JPG格式的照片。
1.3 那么RAW和JPG格式到底有什么比較大的區別呢?
實際上,JPG格式所顯示的是照片,也可以說是最終的成片,而RAW是從影像傳感器中得到的最原始的信息數據包,而非圖像。
RAW我們通常用色彩深度來表示,色彩深度的單位是bit,一般的JPG照片色彩深度為8bit,這意味著RGB這三種顏色,每個顏色有256個等級,組合起來可以產生總共256256256即約1677萬種不同的顏色。
關于位深可以參考我的另一篇博客:8位, 16位,24位,32位圖片顯示原理及對比、讀自己的mask、判斷是否為灰度圖
一般的RAW格式照片,目前的主流水平是12bit和14bit,比如一些全畫幅機身能夠達到14bit的水準。另外一些高端的中畫幅相機能夠支持16bit RAW格式文件。色彩深度高了,攜帶的信息也就更加豐富,但是體積也就增加了,不過這個數值仍然是越大越好。
二、使用Python讀取raw格式圖像并顯示
首先確定我們的raw圖像是多少位的,我們的是16bit
實現只需兩個基本庫,能夠實現16位圖片的無損轉換,轉換裁切保存之后的圖片位深依然為16bit,方便以后處理。
- 一律使用np.fromfile讀取之后再轉化為.png或者.tff格式,讀取的時候直接傳入文件路徑,不用加'r'
2.1 輸出為png圖像顯示
import os.path import os from PIL import Image import numpy as np import cv2 import imageiodef read(input_dir, shape, save_dir):if not os.path.exists(save_dir):os.makedirs(save_dir)# img = cv2.imread('D:\Installer\\h_1_3_00_2_4_0_0_5_30_01_0_00.raw')# type = img.dtypew, h, c = shapeinput_dir = os.path.join('D:\\JS17\rawData\\', input_dir)list = os.listdir(input_dir)for path in list:if path.endswith('.xml'):continue### 直接傳入文件路徑,不用加'r'imgData = np.fromfile(input_dir + '\\' + path, dtype='uint16') ### 這里是16bit所以要uint16w, h, c = 5120, 4096, 1# # imgData = np.fromfile(r'D:\Installer\\h_1_1_0_2_0_4_1_5_38_63_0.raw', dtype='uint16') # SAR# # w, h, c = 2048, 2048, 1imgData = imgData.reshape(w, h, c)cv2.imwrite(save_dir + path.split('.')[0] + '.png', imgData) if __name__ == '__main__':#### 傳入raw文件夾;圖像的w, h, c;圖像的保存路徑read('SAR', [2048, 2048, 1], 'D:\\JS17\TIFData\SAR\\')read('中波紅外', [1024, 1280, 1], 'D:\\JS17\TIFData\MiddleHW\\')read('可見光', [4096,5120, 1], 'D:\\JS17\TIFData\KJG\\')2.2 輸出為tif圖像顯示
import imageio import numpy as npraw=np.memmap('140-200-1000(2).raw',dtype=np.uint16,shape=(4288,3524))#讀取16位raw圖片 imageio.imsave('raw.tif',raw)#轉換格式與保存### 上面兩行其實就已經讀取并且轉換完成了,已經可以顯示了 ### 下面是做裁剪的,僅供參考 tif=np.memmap('raw.tif',dtype=np.uint16,shape=(4288,3524))#讀取16位tif圖片 resize=tif[1200:1700,1200:1700] imageio.imsave('resize.tif',resize)#對16位tif圖片裁切參考:關于RAW格式照片 你不可不知的十件事
使用Python讀取raw格式圖像并顯示
[史上最全]16bit RAW圖片讀取、轉換、裁切、保存
總結
以上是生活随笔為你收集整理的RAW图像详解及使用Python读取raw格式图像并显示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SCRM升级--企业微信数字营销解决方案
- 下一篇: 空白脂质体冻干粉制备以及荧光素修饰空白脂