1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > png图像保存为yuv格式以及yuv格式转为png

png图像保存为yuv格式以及yuv格式转为png

时间:2021-05-07 17:11:50

相关推荐

png图像保存为yuv格式以及yuv格式转为png

png图像保存为yuv格式

import cv2import osfrom tqdm import tqdmdef bgr2yuv420bin(path_yuv, img_bgr):yuv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2YUV)y = yuv[:, :, 0]u = yuv[:, :, 1]v = yuv[:, :, 2]u = cv2.resize(u, (int(u.shape[1] / 2), int(u.shape[0] / 2)))v = cv2.resize(v, (int(v.shape[1] / 2), int(v.shape[0] / 2)))with open(path_yuv, 'wb') as f:for row in range(y.shape[0]):for col in range(y.shape[1]):f.write(y[row, col])for row in range(u.shape[0]):for col in range(u.shape[1]):f.write(v[row, col])f.write(u[row, col])if __name__ == "__main__":imgDir = "D:\\workshop\\temp\\DR\\img\\"saveYUVDir = "D:\\workshop\\temp\\DR\\yuv"for root, dirs, files in os.walk(imgDir):for file in tqdm(files):img = cv2.imread(root + '/' + file)bgr2yuv420bin(saveYUVDir + '/' + file.replace('png', 'yuv'), img)

yuv格式转为png

#!/usr/bin/env python3# -*- coding: utf-8 -*-import cv2import numpy as npimport osimport tqdmdef yuv2bgr(filename, height, width, startfrm):""":param filename: 待处理 YUV 视频的名字:param height: YUV 视频中图像的高:param width: YUV 视频中图像的宽:param startfrm: 起始帧:return: None"""fp = open(filename, 'rb')framesize = height * width * 3 // 2 # 一帧图像所含的像素个数h_h = height // 2h_w = width // 2fp.seek(0, 2) # 设置文件指针到文件流的尾部ps = fp.tell() # 当前文件指针位置numfrm = ps // framesize # 计算输出帧数fp.seek(framesize * startfrm, 0)for i in range(numfrm - startfrm):Yt = np.zeros(shape=(height, width), dtype='uint8', order='C')Ut = np.zeros(shape=(h_h, h_w), dtype='uint8', order='C')Vt = np.zeros(shape=(h_h, h_w), dtype='uint8', order='C')for m in range(height):for n in range(width):Yt[m, n] = ord(fp.read(1))for m in range(h_h):for n in range(h_w):Ut[m, n] = ord(fp.read(1))for m in range(h_h):for n in range(h_w):Vt[m, n] = ord(fp.read(1))img = np.concatenate((Yt.reshape(-1), Ut.reshape(-1), Vt.reshape(-1)))img = img.reshape((height * 3 // 2, width)).astype('uint8') # YUV 的存储格式为:NV12(YYYY UV)# 由于 opencv 不能直接读取 YUV 格式的文件, 所以要转换一下格式bgr_img = cv2.cvtColor(img, cv2.COLOR_YUV2BGR_NV21) # 注意 YUV 的存储格式cv2.imshow("img", bgr_img)cv2.waitKey(0)fp.close()print("job done!")return Noneif __name__ == '__main__':fileDir = "D:\\workshop\\temp\\DR\\yuv\\"imgDir = "D:\\workshop\\temp\\DR\\img\\"for root, dirs, files in os.walk(fileDir):for file in files:path = root + fileimg = cv2.imread(imgDir + file.replace("yuv", "png"))_ = yuv2bgr(filename=path, height=img.shape[0], width=img.shape[1], startfrm=0)

-参考:

nv12与nv2的区别

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。