raw数据的排列方式(之一)如下图,GRGB;下面的代码将raw数据(dng格式)转成4通道的GGRB数据用于后续处理;

Bayer阵列
import rawpyimport scipy.ioimport cv2import numpy as npwith rawpy.imread("3984_2984.dng") as raw:# un-blur# np_img = raw.postprocess(use_camera_wb=True, half_size=False, no_auto_bright=True, output_bps=8)# scipy.misc.toimage(np_img, high=255, low=0, cmin=0, cmax=255).save("rgb.jpg")print("===============================")# print(raw.raw_value(9, 0))raw_img = raw.raw_image # get raw data# print(raw_img)raw_H = raw_img.shape[0]raw_W = raw_img.shape[1]if raw.raw_pattern[0, 0] == 0: # CFA=RGGBraw_G1 = raw_img[1:raw_H:2, 0:raw_W:2]raw_G2 = raw_img[0:raw_H:2, 1:raw_W:2]raw_R = raw_img[0:raw_H:2, 0:raw_W:2]raw_B = raw_img[1:raw_H:2, 1:raw_W:2]elif raw.raw_pattern[0, 0] == 2: # BGGRraw_G1 = raw_img[1:raw_H:2, 0:raw_W:2]raw_G2 = raw_img[0:raw_H:2, 1:raw_W:2]raw_R = raw_img[1:raw_H:2, 1:raw_W:2]raw_B = raw_img[0:raw_H:2, 0:raw_W:2]elif raw.raw_pattern[0, 0] == 1 and raw.raw_pattern[0, 1] == 0: # GRBGraw_G1 = raw_img[0:raw_H:2, 0:raw_W:2]raw_G2 = raw_img[1:raw_H:2, 1:raw_W:2]raw_R = raw_img[1:raw_H:2, 0:raw_W:2]raw_B = raw_img[0:raw_H:2, 0:raw_W:2]elif raw.raw_pattern[0, 0] == 1 and raw.raw_pattern[0, 1] == 2: # GBRGraw_G1 = raw_img[0:raw_H:2, 0:raw_W:2]raw_G2 = raw_img[1:raw_H:2, 1:raw_W:2]raw_R = raw_img[1:raw_H:2, 0:raw_W:2]raw_B = raw_img[0:raw_H:2, 1:raw_W:2]else:assert False# blur# blur_size = (15, 15)# G1 = cv2.blur(raw_G1, blur_size)# G2 = cv2.blur(raw_G2, blur_size)# R = cv2.blur(raw_R, blur_size)# B = cv2.blur(raw_B, blur_size)print("==============================")np_img = raw.postprocess(use_camera_wb=True, half_size=False, no_auto_bright=True, output_bps=8)# save raw_img to rgbscipy.misc.toimage(np_img, high=255, low=0, cmin=0, cmax=255).save("blur_rgb.jpg")
