MATLAB 缩放视频的长度

我们经常有对图像缩放的要求,这方面有很多现成的代码和函数,比如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


猜你喜欢

转载自blog.csdn.net/captainhailong/article/details/80729742