发布网友 发布时间:2022-04-21 19:21
共5个回答
热心网友 时间:2023-10-22 20:46
%该代码用于将视频文件的每一帧变成一幅图片
[filename,pathname,fileindex]=uigetfile('*.avi','选择视频文件','选择视频文件.avi','Multiselect','on');
% [FileName,PathName,FilterIndex] = uigetfile(FilterSpec,DialogTitle,DefaultName)
% FileName:返回的文件名
% PathName:返回的文件的路径名
% FilterIndex:选择的文件类型
% FilterSpec:文件类型设置
% DialogTitle:打开对话框的标题
% DefaultName:默认指向的文件名
if ischar(filename) %ischar(tline)是判断tline变量是否是字符串类型的变量
video=VideoReader([pathname filename]);
%General Settings:
%Duration 时间
%Name 视频名称
%Path 路径
%Tag =
%Type = mmreader
%UserData = []
%%Video Settings:
%BitsPerPixel=24
%FrameRate 视频采集速率
%Height 高度
%NumberOfFrames 总帧数
%VideoFormat 图像模式
%Width = 宽度
LEN=video.NumberOfFrames; %获得视频长度
dir=strcat(pathname,strrep(filename,'.avi',''),'\pic');
mkdir(dir);
fn=strrep(filename,'.avi','');
for k=1:LEN-1 %若read到len,常会报错如下??? MATLAB:read:readTimedOut,read到len-1就好了
%frame=rgb2gray(read(video,k)); %将图像二值化,因为处理中进行二值化,故不在此使用
frame=read(video,k);
imwrite(frame,strcat(fn,'',int2str(k),'.jpg'),'jpg');%把每帧图像存入硬盘,直接存入当前目录
end
elseif iscell(filename)
navi=length(filename);
for n=1:navi
video=VideoReader([pathname filename{n}]);
%%General Settings:
%Duration 时间
%Name 视频名称
%Path 路径
%Tag =
%Type = mmreader
%UserData = []
%%Video Settings:
%BitsPerPixel=24
%FrameRate 视频采集速率
%Height 高度
%NumberOfFrames 总帧数
%VideoFormat 图像模式
%Width = 宽度
LEN=video.NumberOfFrames; %获得视频长度
dir=strcat(pathname,strrep(filename{n},'.avi',''),'\pic');
mkdir(dir);
fn=strrep(filename{n},'.avi','');
for k=1:LEN-1 %若read到len,常会报错如下??? MATLAB:read:readTimedOut,独到len-1就好了
frame=rgb2gray(read(video,k));
if k<10
imwrite(frame,strcat(dir,'\',fn,'000',int2str(k),'.jpg'),'jpg');%把每帧图像存入硬盘
elseif k>=10 && k<100
imwrite(frame,strcat(dir,'\',fn,'00',int2str(k),'.jpg'),'jpg');%把每帧图像存入硬盘
elseif k>=100 && k<1000
imwrite(frame,strcat(dir,'\',fn,'0',int2str(k),'.jpg'),'jpg');%把每帧图像存入硬盘
elseif k>=1000 && k<10000
imwrite(frame,strcat(dir,'\',fn,'',int2str(k),'.jpg'),'jpg');%把每帧图像存入硬盘
end
end
disp(strcat(num2str(n),'/',num2str(navi),' : "',filename{n},'" Finished!',datestr(now,13)));
end
else
return
end
msgbox('所有帧提取完毕,已写入磁盘!','提示');
热心网友 时间:2023-10-22 20:47
VideoReader类可以读取视频文件,一帧一帧返回图像。
xyloObj = VideoReader('xylophone.mp4');至于”关键帧“提取,就不知道你要用什么方法来判断是不是关键帧了。
热心网友 时间:2023-10-22 20:47
clc;clear all;close all;
热心网友 时间:2023-10-22 20:48
用ffmpeg提取关键帧(I帧),然后在Matlab中调用!祝你成功,测试通过后发给我代码就行了,嘿嘿~~~
热心网友 时间:2023-10-22 20:48
可以去matlab中文论坛上逛逛会有所帮助的