我们经常有对图像缩放的要求,这方面有很多现成的代码和函数,比如matlab中的resize,但是在视频分析中有时候将不同长度的视频统一的缩放到指定长度帧数,本文提供了将视频缩放到指定长度帧的MATLAB 代码。
function out = video2_100( video,aim,length)
%VIDEO2_100 此处显示有关此函数的摘要
% 此处显示详细说明
%参数含义:video:输入视频的路径:如D:test.avi
% aim:输出视频路径:如D:out.avi
%length:缩放到的帧数
index=0;
n=3;
obj = VideoReader(video);%输入视频位置
numFrames = obj.NumberOfFrames; % 帧的总数 NumberOfFrames
step=numFrames/100;
frame=read(obj,1);
[height,width,~]=size(frame);
temp_video=zeros(height,width,3,100);
video=zeros(height,width,3,numFrames-1);
size(temp_video)
for k = 1 :1: numFrames-1% 读取所有帧
index=index+1;
frame = read(obj,k);%读取第几帧
video(:,:,:,k)=frame;
% frame_name=strcat('5_',num2str(index,'%06d'),'.jpg');
% frame_path=fullfile('E:\pose-estimation\三中主校\Images',frame_name);
% % imshow(frame);%显示帧
% imwrite(frame,frame_path,'jpg');% 保存帧
end
% imshow(uint8(video(:,:,:,1)));
%方法一:求每个像素点亮度关于时间的函数
% for i=1:3
% for j=1:height
% j
% for k=1:width
% x=(1:numFrames-1);
% y=video(j,k,i,:);
% y=reshape(y,1,numFrames-1);
% y1=polyfit(x,y,n);
% for o=1:100
%
% temp_video(j,k,i,o)=y1(1)*((o-1)*step)^3+y1(2)*((o-1)*step)^2+y1(3)*((o-1)*step)^1+y1(4)*((o-1)*step)^0;
% end
%
% end
% end
% end
%
%方法二:最近邻插值
for i=1:3
for j=1:height
for k=1:width
for m=1:length
temp_video(j,k,i,m)=video(j,k,i,round(m/length*(numFrames-1)));
end
end
end
end
% imshow(uint8(temp_video(:,:,:,1)));
fps = 25; %帧率
if(exist(aim,'file'))
delete aim
end
%生成视频的参数设定
aviobj=VideoWriter(aim); %创建一个avi视频文件对象,开始时其为空
aviobj.FrameRate=fps;
open(aviobj);%Open file for writing video data
for i=1:size(temp_video,4)
frame=temp_video(:,:,:,i)
writeVideo(aviobj,frame);
end
close(aviobj);
end