使用相机拍摄的RAW图像,往往带有厂商自定义的文件头,而我只想获取到文件图像部分的原始Bayer数据,然后自己进行去噪、去马赛克、白平衡等ISP算法。
示例:获取索尼相机拍摄的.ARW文件中的原始图像数据。以下代码同样适用于其他类型相机拍摄的RAW图,如佳能的.CR2文件。
import rawpy
openpath = "D:\\IMG\\RAWSample\\Img.ARW";
savepath = 'D:\\IMG\\RAWSample\\Bayer.raw';
with rawpy.imread(openpath) as raw:
bayer_visible = raw.raw_image_visible;
width = bayer_visible.shape[0];
height = bayer_visible.shape[1];
将读取到的RAW原始数据打印出来,可以知道原始数据图像的宽和高,打印出原始数据的二维矩阵可以知道图像的位深度。
print(bayer_visible.shape)
print(bayer_visible)
将二维整型数组转换为字节流,每两个字节存储一个整型数据,低位在前,高位在后。
with open(savepath, 'wb') as f:
for x in range(0,width):
for y in range(0,height):
data = int(bayer_visible[x][y]);
f.write(data.to_bytes(2, byteorder='little'));
得到的RAW文件格式为:宽度6024,高度4024,深度:12位,颜色滤波阵列为RGGB。
文件所在链接:https://pan.baidu.com/s/1Jgkg0Uqh7Bvw6avcbpQb2Q
提取码:p0wx
Img.ARW图像效果:
Bayer.raw经去马赛克后的效果:
要得到上面图像的效果,还需要白平衡,色彩矩阵校正,伽玛校正等过程,这里就先这样吧,原始数据已经到手了。