MATLAB实现视频关键帧提取 100

求具体操作方法!!如何将视频转换为图片,然后对图片进行关键帧提取,用MATLAB实现。十分感谢!!... 求具体操作方法!!如何将视频转换为图片,然后对图片进行关键帧提取,用MATLAB实现。
十分感谢!!
展开
 我来答
peng6575359
2017-11-16
知道答主
回答量:3
采纳率:0%
帮助的人:2527
展开全部
%该代码用于将视频文件的每一帧变成一幅图片
[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('所有帧提取完毕,已写入磁盘!','提示');
WM_THU
推荐于2017-11-20 · TA获得超过7164个赞
知道大有可为答主
回答量:4285
采纳率:80%
帮助的人:3927万
展开全部

VideoReader类可以读取视频文件,一帧一帧返回图像。

xyloObj = VideoReader('xylophone.mp4');
nFrames = xyloObj.NumberOfFrames;
vidHeight = xyloObj.Height;
vidWidth = xyloObj.Width;
for k = 1 : nFrames    
    I = read(xyloObj, k); % 读出第k帧
    ...
end

至于”关键帧“提取,就不知道你要用什么方法来判断是不是关键帧了。

更多追问追答
追问
我想用
边界提取和K-Mean法聚类提取。我是小白,想学习下,咋样提取视频关键帧。要不要把视频分割了。能不能教教我。谢谢了
追答
你得先定义好什么叫”关键帧“,然后根据定义推导检测方法。这不是凭空想出来的。。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
神圣魔天使
2014-03-17 · TA获得超过3990个赞
知道大有可为答主
回答量:1835
采纳率:0%
帮助的人:1086万
展开全部

clc;clear all;close all;



已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2014-03-31 · TA获得超过509个赞
知道小有建树答主
回答量:194
采纳率:100%
帮助的人:60.7万
展开全部
用ffmpeg提取关键帧(I帧),然后在Matlab中调用!祝你成功,测试通过后发给我代码就行了,嘿嘿~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叶落双茶
2014-03-07 · 超过21用户采纳过TA的回答
知道答主
回答量:111
采纳率:0%
帮助的人:49.6万
展开全部
可以去matlab中文论坛上逛逛会有所帮助的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式