H.264压缩技术源码分析之视频部分——1.3视频resize

% Generates Frames
% clc
% clear all;
% close all;

%% Resizing 
%接受5个输入参数
%mov是之前读取的视频每帧数据的结构体数组
%Frame_start和Frame_end是指定要处理的视频帧范围
%Width,Height是调整后的视频宽度和高度
function A01Resize(mov,Frame_start,Frame_end,Width,Height)

FrameNo=(Frame_end - Frame_start)+1;
VideoSeq_Input=zeros(Height,Width,FrameNo);%初始化一个三维数组存储resize后的视频序列

%创建一个用于写入视频的VideoWriter对象,并打开该对象。
writerObj = VideoWriter('ToBeEncod.avi','Uncompressed AVI');
open(writerObj);
%对指定的视频帧范围进行循环处理
for i=Frame_start:Frame_end
% 据NTSC标准将RGB值按照一组系数加权求和,得到灰度值矩阵I
% 将处理后的灰度图像矩阵I存储到VideoSeq_Input对应位置上 
% 将灰度图像写入writerObj对象,用于生成新的视频文件。
 I= .2989*mov(1,i).cdata(1:Height,1:Width,1)...
	+.5870*mov(1,i).cdata(1:Height,1:Width,2)...
	+.1140*mov(1,i).cdata(1:Height,1:Width,3);
VideoSeq_Input(:,:,i)=I;
writeVideo(writerObj,I);
% VideoSeq_mov(1,i).cdata=I;
end
close(writerObj);
%关闭writerObj对象,并将VideoSeq_Input保存为MAT文件。
save('01ResizedFrames.mat','VideoSeq_Input');


%读取新生成的视频文件,并将视频的每一帧数据存储到结构体数组VideoSeq_mov中。
VideoSeq_Obj = VideoReader('ToBeEncod.avi');
nFrames = VideoSeq_Obj.NumberOfFrames;
vidHeight = VideoSeq_Obj.Height;
vidWidth = VideoSeq_Obj.Width;
% Preallocate movie structure.
VideoSeq_mov(1:nFrames) = ...
    struct('cdata', zeros(vidHeight, vidWidth, 3, 'uint8'),...
           'colormap', []);
% Read one frame at a time.
for k = 1 : nFrames
    VideoSeq_mov(k).cdata = read(VideoSeq_Obj, k);
end
hf = figure;
set(hf, 'position', [150 150 Width Height])


% Play back the movie once at the video's frame rate.
movie(hf, VideoSeq_mov, 1, VideoSeq_Obj.FrameRate);

resize函数中进行压缩编码的部分,主要针对视频的帧进行处理,通常会对Y分量进行压缩。而对于彩色图像,一般需要将RGB图像转换为YUV图像,然后再对Y分量进行处理。

YUV是一种表示彩色图像的颜色空间,它分为亮度(Y)和色度(U、V)三个分量。其中,Y分量代表图像的亮度信息,而U和V分量代表色度信息。

在图像处理中,通常会将彩色图像转换为YUV图像,再对Y分量进行处理,可以更好地实现图像压缩和编码。转换为YUV之后,可以通过对Y分量进行处理(如降低分辨率、压缩、编码等)来减少数据量,同时尽可能地保留图像的信息和质量。

具体的YUV转换可以通过不同的算法和转换公式实现,例如常见的转换方法是使用以下公式:

Y = 0.299 * R + 0.587 * G + 0.114 * B

U = -0.14713 * R - 0.28886 * G + 0.436 * B

V = 0.615 * R - 0.51498 * G - 0.10001 * B

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值