1. 程式人生 > 其它 >使用matlab提取YUV檔案各分量並存入txt檔案

使用matlab提取YUV檔案各分量並存入txt檔案

技術標籤:MATLABmatlab

工具:

MATLAB

思路:

1.YUV檔案為視訊序列檔案,可以理解為很多幀影象,每一幅影象按照YUV分量進行儲存畫素,因此需要分別將每一幀的Y分量U分量V分量提取出來,將其存成十進位制的txt格式。
2.使用MATLAB首先提取出YUV檔案的每一幀的三個分量
參考連結:
連結: https://blog.csdn.net/sinat_33718563/article/details/79248012?utm_medium=distribute.pc_relevant.none-task-blog-title-10&spm=1001.2101.3001.4242.
最終儲存的txt資料以每行8個畫素的格式進行儲存。(這個是根據學長提供的YUV分量的txt檔案的格式來提取的)。(還有另外的一個格式,直接提取成一列的格式。)

程式碼設計(只儲存前5幀資料)

%%  讀取4:2:0格式YUV的Y、U和V分量,然後將三個分量分別儲存為.txt格式
clear
clc
%% Read yuv from file
row=250;      %   行
col=320;      %   列
fnum=300;     %   幀數
yuvseq = 'foreman_320_256_300_kj.yuv';        % 輸入yuv序列名稱,要把YUV檔案放在統一路徑下。
len=length(yuvseq);
yuvName=yuvseq(1:len-4);
fid = fopen(yuvseq, 'r');
 
rec_Y=zeros
(col,row,fnum);%三維0矩陣 rec_U=zeros(col/2,row/2,fnum); rec_V=zeros(col/2,row/2,fnum); for f=1:fnum%一幀一幀的存入各分量 [rec_Y(:,:,f),count] = fread(fid,[col,row],'uchar');%8位,無符號字元型 [rec_U(:,:,f),count1]=fread(fid,[col/2,row/2],'uchar'); [rec_V(:,:,f),count2]=fread(fid,[col/2,row/2],'uchar'); end filename_Y=
sprintf('%s%s',yuvName,'_Y.txt'); %% 生成.txt名稱 outfid_Y=fopen(filename_Y,'wb'); filename_U=sprintf('%s%s',yuvName,'_U.txt'); outfid_U=fopen(filename_U,'wb'); filename_V=sprintf('%s%s',yuvName,'_V.txt'); outfid_V=fopen(filename_V,'wb'); %存V分量 i=1; for f=1:5 pic_V=uint8(rec_V(:,:,f)'); %% '代表轉置操作 for j=1:(row/2)%for k=1:(col/2)%if(i<8) fprintf(outfid_V,'%d\t',pic_V(j,k)); else fprintf(outfid_V,'%d\n',pic_V(j,k)); i=0; end i=i+1; end end end %存Y分量txt資料 i=1; for f=1:5 pic_Y=uint8(rec_Y(:,:,f)'); %% '代表轉置操作 for j=1:row%for k=1:col%if(i<8) fprintf(outfid_Y,'%d\t',pic_Y(j,k)); else fprintf(outfid_Y,'%d\n',pic_Y(j,k)); i=0; end i=i+1; end end%% 將每個矩陣顯示為圖片 end %存U分量 i=1; for f=1:5 pic_U=uint8(rec_U(:,:,f)'); %% '代表轉置操作 for j=1:(row/2)%for k=1:(col/2)%if(i<8) fprintf(outfid_U,'%d\t',pic_U(j,k)); else fprintf(outfid_U,'%d\n',pic_U(j,k)); i=0; end i=i+1; end end end %% fclose(fid); fclose(outfid_Y); fclose(outfid_U); fclose(outfid_V);

儲存格式

如果要更換格式,只需要修改for迴圈對應的引數即可。
在這裡插入圖片描述