matlab公共函数之保存YUV数据

matlab保存图像为YUV格式的脚本函数

% function flag = saveYUVData(filename,Y,U,V,format)
% input params.
% filename: saving data path
% Y: Y data, res. width x height
% U: U data, res. width/2 x height/2 for NV12, NV21 and YUV420P, width x height for YUV444
% V: V data, res. width/2 x height/2 for NV12, NV21 and YUV420P, width x height for YUV444
% format: must be NV12, NV21, YUV420P or YUV444
%
% output
% flag: if successed, flag = 1, otherwise flag = 0
%
%
% Author: KevenLee
% Contact: [email protected]
% Version: V1.0

function flag = saveYUVData(filename,Y,U,V,format)
flag = 1;

[height,width] = size(Y);

fid=fopen(filename,‘w+‘);
if fid <= 0
    flag = -1;
    disp(‘cannot open file!‘)
    return;
end

imgY = Y‘;
imgU = U‘;
imgV = V‘;
imgYUV = Y‘;
switch format
    case ‘NV21‘
        imgNV21UV = zeros(width,height/2);

        imgNV21UV(1:2:end,:) = imgV;
        imgNV21UV(2:2:end,:) = imgU;

        imgYUV = zeros(1,width*height*1.5);

        imgYUV(1:1:width*height) = imgY(:);
        imgYUV(width*height+1:end) = imgNV21UV(:);
    case ‘NV12‘
        imgNV21UV = zeros(width,height/2);
        imgNV21UV(1:2:end,:) = imgU;
        imgNV21UV(2:2:end,:) = imgV;

        imgYUV = zeros(1,width*height*1.5);

        imgYUV(1:1:width*height) = imgY(:);
        imgYUV(width*height+1:end) = imgNV21UV(:);
    case ‘YUV420P‘
        imgUV = zeros(width,height/2);
        imgUV(1:1:round(width/2),:) = imgU;
        imgUV(round(width/2)+1:1:end,:) = imgV;

        imgYUV = zeros(1,width*height*1.5);

        imgYUV(1:1:width*height) = imgY(:);
        imgYUV(width*height+1:end) = imgUV(:);
    case ‘YUV444‘
        imgYUV = zeros(1,width*height*3);
        imgYUV(1:1:width*height) = imgY(:);
        imgYUV(width*height+1:1:width*height*2) = imgU(:);
        imgYUV(width*height*2+1:1:width*height*3) = imgV(:);
    otherwise
        disp(‘not support!‘)
end

fwrite(fid,imgYUV,‘uint8‘);

fclose(fid);

end
时间: 08-22

matlab公共函数之保存YUV数据的相关文章

ffmpeg最简单的解码保存YUV数据 &lt;转&gt;

video的raw data一般都是YUV420p的格式,简单的记录下这个格式的细节,如有不对希望大家能指出.   YUV图像通常有两种格式,一种是packet 还有一种是planar    从字面上就能理解packet的意思就是所有的yuv数据都是一股脑的放在一起,当然 内部的数据还是按照格式要求的,只是从外部来讲是一整个包包含了所有的yuv数据.最长见的YUV格式就是planar格式了.这个格式是讲yuv三个分量分别放在三个数组里.   如下图是个420p的格式图: YUV420格式是指,每

matlab公共函数之RGB与YUV转换

matlab中有自带的rgb转ycbcr函数,但是根据观测,其Y的值为[16 235],不符合我们的要求,所以,提供另一种规范下的转换脚本函数,其Y的值满足[0 255] RGB转YUV % function yuv = myrgb2yuv(image) % input params. % image: input color image with 3 channels, which value must be [0 255] % output % yuv: 3 channels(YUV444,

matlab 哪个函数可以从一组数据中随机抽取一部分出来

假设你原来的数据存在变量a中 如果,你想从a中随机抽取固定N个数c=randperm(numel(a));b=a(c(1:N));b就是从a中随机抽取的N个数(N应该小于a中元素的总个数) numel(a)获得原来a中元素的个数 c=randperm(numel(a)); 得到一个由1到numel(a))个自然数组成的随机乱序数列 加入a中有100个元素,那么运行完c=randperm(numel(a));之后 c就是一个由1到100的自然数组成的数组,但是顺序是随机打乱的 c(1:N)取c的前

matlab结构体形式保存数据生成.mat文件&lt; 转&gt;

2015年 参加天池大数据竞赛 为了建立模型,打算基于matlab使用Random Forest Algorithm的工具包 该工具包我在此分享给大家,http://yunpan.cn/cVXsjQvh8ARcx  访问密码 30a3 该工具包导入的数据格式就是我如下所说的封装方式,因此,在使用该算法包时,需要把自己的数据进行封装一下. 通过matlab打开,可以知道twonorm.mat里面还封装了两个.mat文件. 我们看看工具包的作者给的tutorial 部分源码如下: 的源码如下: 说明

Thinkphp3.2.3框架下封装公共的函数,例如封装CURL函数来获取接口数据

当我们需要在控制层调用相同的封装函数时,写多次相同的函数,显得代码十分的拉杂,不精简: TP框架有一个很好的机制,可以再Common定义一个function.php函数,当我们在控制层调用的时候直接调用就可以使用,方便快捷: 具体实现方便如下: 我们可以再三个地方设置公共的函数function.php (注意:function.php默认是不存在的,需手动创建) 根目录\Application\Common\Common\function.php(公共的函数,Home和Admin都可以调用) 根

YUV数据的几种采样格式以及保存方式

1.YUV数据的几种采样格式 4:4:4 这个不用解释了,这是每个像素占三个字节的内存. 4:2:2  Y0U0V0  Y1U1V1  Y2U2V2  Y3U3V3对于这四个像素,采样之后存放的码流为:Y0U0 Y1V1 Y2U2 Y3V3,占用的内存大小为4+4/2 +4/2=8 4:2:0并不意味着只有Y和U而没有V,他指的是对于每行扫描线来说,只有一种色度分量以2:1的抽样率存储,相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2, 对于[Y0 U0

MATLAB中文件的读写和数据的导入导出

http://blog.163.com/tawney_daylily/blog/static/13614643620111117853933/ 在编写一个程序时,经常需要从外部读入数据,或者将程序运行的结果保存为文件.MATLAB使用多种格式打开和保存数据.本章将要介绍 MATLAB中文件的读写和数据的导入导出. 13.1 数据基本操作 本节介绍基本的数据操作,包括工作区的保存.导入和文件打开.13.1.1 文件的存储 MATLAB支持工作区的保存.用户可以将工作区或工作区中的变量以文件的形式保

Matlab对Modelsim仿真生成的数据进行分析

Matlab对Modelsim仿真生成数据的处理也是通过文件读写实现的.即通过Verilog语句,将仿真过程中的某个信号写入文件,然后在Matlab中在把这个文件的数据读出来,就可以在Matlab中进行分析了. 下图也通过一个简单的例子,说明一下整个过程. 以下的Verilog语句实现将信号data_out的数据写入data_out.txt文件 integer w_file; initial w_file = $fopen("data_out.txt"); always @(i) be

在C函数中保存状体:registry、reference和upvalues

C函数可以通过堆栈来和Lua交换数据,但有时候C函数需要在函数体的作用域之外保存某些Lua数据,那么我们想到全局变量或static变量,这样做的缺点是:(1)为Lua设计C函数库时,导致不可重入:(2)不是所有的Lua值都能很好的保存到C变量中.那么可不可以将值保存在Lua全局变量里面呢,可以,Lua就提供了一个独立的被称为registry的表,但是Lua代码本身不能访问它. 1.registry全局注册表 解释:一个普通的Lua表,使用假索引(pseudo-index)LUA_REGISTRY