一、RAW圖像詳解
1.1 什么是raw格式圖像?
RAW在英文中的解釋是未處理的、自然狀態(tài)的,這也就是RAW文件的真諦。RAW圖像就是CMOS或者CCD圖像感應(yīng)器將捕捉到
的光源信號轉(zhuǎn)化為數(shù)字信號的原始數(shù)據(jù),因此RAW文件也被人們稱之為“數(shù)碼底片”。RAW格式的全稱是RAW Image Format,記
錄了由相機(jī)拍攝所產(chǎn)生的一些元數(shù)據(jù),如ISO的設(shè)置、快門速度、光圈值、白平衡等信息。
1.2 RAW格式與JPG格式有什么差別?
如果一句話概括,那就是JPG格式實(shí)際上就是由RAW格式處理而來的。RAW格式記錄的是拍攝現(xiàn)場的原始數(shù)據(jù),然后經(jīng)過相機(jī)自身進(jìn)行白平衡、銳化、飽和度、色彩等等處理之后,再進(jìn)行封裝,就成為了JPG格式的照片。
1.3 那么RAW和JPG格式到底有什么比較大的區(qū)別呢?
實(shí)際上,JPG格式所顯示的是照片,也可以說是最終的成片,而RAW是從影像傳感器中得到的最原始的信息數(shù)據(jù)包,而非圖像。
RAW我們通常用色彩深度來表示,色彩深度的單位是bit,一般的JPG照片色彩深度為8bit
,這意味著RGB這三種顏色,每個(gè)顏色有256個(gè)等級,組合起來可以產(chǎn)生總共256256256即約1677萬種不同的顏色。
關(guān)于位深可以參考我的另一篇博客:8位, 16位,24位,32位圖片顯示原理及對比、讀自己的mask、判斷是否為灰度圖
一般的RAW格式照片,目前的主流水平是12bit和14bit,比如一些全畫幅機(jī)身能夠達(dá)到14bit的水準(zhǔn)。另外一些高端的中畫幅相機(jī)能夠支持16bit RAW格式文件。色彩深度高了,攜帶的信息也就更加豐富,但是體積也就增加了,不過這個(gè)數(shù)值仍然是越大越好。
二、使用Python讀取raw格式圖像并顯示
首先確定我們的raw圖像是多少位的,我們的是16bit
實(shí)現(xiàn)只需兩個(gè)基本庫,能夠?qū)崿F(xiàn)16位圖片的無損轉(zhuǎn)換,轉(zhuǎn)換裁切保存之后的圖片位深依然為16bit,方便以后處理。文章來源:http://www.zghlxwxcb.cn/news/detail-556746.html
- 一律使用
np.fromfile
讀取之后再轉(zhuǎn)化為.png
或者.tff
格式,讀取的時(shí)候直接傳入文件路徑,不用加'r'
2.1 輸出為png圖像顯示
import os.path
import os
from PIL import Image
import numpy as np
import cv2
import imageio
def 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.dtype
w, h, c = shape
input_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所以要uint16
w, 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, 1
imgData = 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 np
raw=np.memmap('140-200-1000(2).raw',dtype=np.uint16,shape=(4288,3524))#讀取16位raw圖片
imageio.imsave('raw.tif',raw)#轉(zhuǎn)換格式與保存
### 上面兩行其實(shí)就已經(jīng)讀取并且轉(zhuǎn)換完成了,已經(jīng)可以顯示了
### 下面是做裁剪的,僅供參考
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圖片裁切
參考:關(guān)于RAW格式照片 你不可不知的十件事
使用Python讀取raw格式圖像并顯示
[史上最全]16bit RAW圖片讀取、轉(zhuǎn)換、裁切、保存文章來源地址http://www.zghlxwxcb.cn/news/detail-556746.html
到了這里,關(guān)于RAW圖像詳解及使用Python讀取raw格式圖像并顯示的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!