RAW图像简单可视化以及png、jpg的区别
RAW图像的简单可视化
import numpy as np
import cv2
import ospath ='the path of raw'
for file in os.listdir(path):if file.endswith('.npy'):# 1. 加载4通道RAW数据raw_data = np.load(os.path.join(path, file))# 2. 提取RGGB拜耳阵列(假设第0通道是R,第1通道是G1,第2通道是G2,第3通道是B)# 注意:不同相机的RAW格式可能不同,需根据实际情况调整h, w, _ = raw_data.shaperggb_data = np.zeros((h, w), dtype=raw_data.dtype) # 初始化单通道RGGB阵列# 填充RGGB拜耳模式(假设4通道顺序是 [R, G1, G2, B])rggb_data[0::2, 0::2] = raw_data[0::2, 0::2, 0] # Rrggb_data[0::2, 1::2] = raw_data[0::2, 1::2, 1] # G1rggb_data[1::2, 0::2] = raw_data[1::2, 0::2, 2] # G2rggb_data[1::2, 1::2] = raw_data[1::2, 1::2, 3] # B# 3. 使用OpenCV去马赛克(确保输入是单通道)rgb_image = cv2.cvtColor(rggb_data, cv2.COLOR_BayerRG2BGR_EA) # EA表示边缘感知插值# 4. 保存结果cv2.imwrite(os.path.join(path, file).replace('npy', 'png'), cv2.cvtColor(rgb_image, cv2.COLOR_BGR2RGB))
可视化的图像整体偏绿
png、jpg的区别
上面的代码最后一行如果保存为jpg格式数据,那么就会显示成一幅严重曝光的图像,几乎看不出来图像信息。
这是因为RAW数据通常是 12/14/16位(值范围0-65535),而JPG仅支持 8位(0-255)。
png是无损压缩,支持16位存储,保存时会保留RAW的原始位深(需明确指定dtype=np.uint16)。而JPG强制转换为8位,且无法正确处理高位深数据的非线性映射。