制作海思.y文件

时间:2020-05-25
本文章向大家介绍制作海思.y文件,主要包括制作海思.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、效果

原文地址:https://www.cnblogs.com/pclx/p/12957600.html