文章目录
- 写函数的数据想读取数据并对数据进行操作,但是有时候需要对中间数据进行处理,如下代码所示,我希望调用函数使yuv 数据转为rgb 数据,而不是像第一个函数一样从文件读起。如果重新写一个函数,又太繁杂且函数名不一样的话增加使用成本;如果在函数内判断,则增加函数运行成本。。。。目前准备采用后一种
def nv212rgb(yuv_path: str, h: int, w: int, save_path=None):
"""nv21 格式的yuv 数据转为RGB 图像
:param yuv_path: yuv 数据的路径 最好不要带中文
:param save_path: 保存数据的路径包括文件名 不要带中文
:return: rgb_img: numpy 格式的rgb 数据 np.uint8
"""
with open(yuv_path, 'rb') as f:
yuv_data = np.fromfile(f, dtype=np.uint8)
cv_format = cv2.COLOR_YUV2BGR_NV21
bgr_img = cv2.cvtColor(yuv_data.reshape(h*3//2, w), cv_format)
if save_path:
cv2.imwrite(bgr_path, bgr_img)
return bgr_img[:, :, ::-1]
def cat_yuv(yuv_path: str, y_path:str, save_path=None):
"""替换原yuv 的y 通道
:param yuv_path: 需要替换y 通道的yuv 数据路径
:param y_path: 一般指y 通道的灰度图
:param save_path: 保存文件路径 包括文件名
:return: rgb_img: RGB 格式的图像
"""
with open(yuv_path, 'rb') as f:
yuv_data = np.fromfile(f, dtype=np.uint8)
y = cv2.imread(y_path, 0)
h, w = y.shape[:2]
y = y.reshape(-1)
yuv_data[:h*w] = y