制作海思.y文件
一、说明
查阅网上的一些资料,了解到.y文件就是YUV格式的文件,参考网上的一些介绍,自己使用python制作出了.y文件。
二、方法
1、工具准备
准备python、opencv-python(即cv2)、numpy、需要转换的图像(.bmp,.jpg,.png等常见格式都可以)
2、思路
这里的.y文件实际上就是将图像Y、U、V通道的数据以二进制形式连续存储的。
如何获取Y 、U、 V通道的数据呢?
opencv提供了一个BGR色彩空间转换到YUV色彩空间的方法:cv2.cvtcolor(src,cv2.COLOR_BGR2YUV)
如何获取YUV单个通道的数据呢?opencv提供了一个分离通道的方法:cv2.split(src)
3、代码实现
import cv2 import numpy as np def rgb2yuv(): src = './image/000001.jpg' dst = './image/000001.y' bgr = cv2.imread(src) yuv = cv2.cvtColor(bgr,cv2.COLOR_BGR2YUV) y, u, v = cv2.split(yuv) height = yuv.shape[0] width = yuv.shape[1] with open(dst,'wb') as fp: for i in range(height): for j in range(width): fp.write(y[i,j]) for i in range(height): for j in range(width): fp.write(u[i,j]) for i in range(height): for j in range(width): fp.write(v[i, j]) def show_yuv(): src = './image/000001.y' fp = open(src,'rb') yuv = np.frombuffer(fp.read(),dtype=np.uint8) fp.close() y = yuv[0:500*420] u = yuv[500*420:500*420*2] v = yuv[500*420*2:500*420*3] reshaped_y = y.reshape(500,420) reshaped_u = u.reshape(500,420) reshaped_v = v.reshape(500,420) cv2.imshow('y',reshaped_y) cv2.imshow('u',reshaped_u) cv2.imshow('v',reshaped_v) yuv=cv2.merge((reshaped_y,reshaped_u,reshaped_v)) cv2.imshow('yuv',yuv) bgr=cv2.cvtColor(yuv,cv2.cv2.COLOR_YUV2BGR) cv2.imshow('bgr',bgr) cv2.waitKey() cv2.destroyAllWindows() if __name__ == '__main__': rgb2yuv() show_yuv()
4、效果


浙公网安备 33010602011771号