1、手机拍摄RAW
目前智能手机一般都带有专业模式,拍摄并保存RAW图需在专业模式中设置中打开对应照片格式,之后在拍摄画面会出现RAW图字样,如下图所示。
之后拍摄会得到两种格式图像,一种压缩JPG格式,一种无损RAW格式。raw格式图像存储大小明显高于jpg图像。
2、对相机RAW格式图像进行数据读取(python)
后续可以通过数据线将手机拍摄到的RAW图保存到电脑文件下,方便对RAW图像进行处理。
第一步:安装和导入Python相关库
安装
pip install rawpy
导入包
import rawpy
import imageio
Imageio是一个Python库,提供了一个简单的接口来读取和写入各种图像数据
rawpy是用于处理RAW图像的一个python库
第二步:读取RAW图像数据
openpath = "C:\\Users\\Lijian\\Desktop\\image\\image.dng";
savepath = "C:\\Users\\Lijian\\Desktop\\image\\image.tiff";
img=rawpy.imread(openpath)
rgb = img.postprocess()//无参数设置处理RAW图像,输出RGB图像
imageio.imsave(savepath, rgb)//保存RGB图像
下图左图为相机保存的RAW图像格式,右图是经过postprocess处理后输出的RGB图像。
对比正常输出的out.jpg图像,image.tiff存在明显色偏及对比度清晰度亮度问题。故需要ISP流程中的不同算法处理后输出与右侧对应的正常颜色图像。
第三步:将RAW图二维整型数组转换为字节流,每两个字节存储一个整型数据,低位在前,高位在后。
array_data=img.raw_image_visible//读取RAW图像数据信息
width = array_data.shape[0];
height = array_data.shape[1];
print(array_data.shape)//打印长和宽
print(array_data)//打印矩阵信息
之后将整型数据转换成字节流,以RAW格式保存。
savepath_raw = "C:\\Users\\Lijian\\Desktop\\image\\image.raw";
with open(savepath_raw, 'wb') as f:
for x in range(0,width):
for y in range(0,height):
data = int(array_data[x][y]);
f.write(data.to_bytes(2, byteorder='little'));
这样我们就可得到一张RAW格式数据字节流图像,原数据的获取方便我们对后续图像进行处理。例如blc、lsc、awb、ccm等。