YUV NV21格式图像转BGR
import cv2
import numpy as np
import glob
import os
import tqdm
import argparse
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--input", required=True,help="path to the input rgb")
ap.add_argument("-o", "--output", required=True,help="path to output directory to store augmentation examples")
ap.add_argument("-hh", "--height",type=int,default=2160,help="image H")
ap.add_argument("-w", "--width", type=int,default=3840,help="image W")
args = vars(ap.parse_args())
def NV212RGB(yuv_path,width,height):
with open(yuv_path, 'rb') as f:
yuvdata = np.fromfile(f, dtype=np.uint8)
#yuvdata = yuvdata[4 * 4 :]
cv_format=cv2.COLOR_YUV2BGR_NV21
bgr_img = cv2.cvtColor(yuvdata.reshape((height*3//2, width)), cv_format)
return bgr_img
if __name__ == '__main__':
input_folder = args['input']
out_folder = args['output']
width = int(args['width'])
height = int(args['height'])
yuv_path_list = glob.glob(os.path.join(input_folder,"*.nv21"))
for yuv_path in tqdm.tqdm(yuv_path_list):
bgr_img = NV212RGB(yuv_path,width,height)
basename = os.path.basename(yuv_path)
savepath = os.path.join(out_folder,basename.replace(".nv21",".bmp"))
cv2.imwrite(savepath,bgr_img)