如何保存帧退出视频在一个特定的文件夹吗

22日视图(30天)
嗨*我有这个函数,提取视频帧,*
函数[]= intoframe (inpath)
inpath = (“clock.avi”)
myVid = mmreader (inpath);
numFrames = myVid.NumberOfFrames;
i = 1;
我< = numFrames
叫做=阅读(myVid,我);
combinedString = strcat (int2str(张),“jpg”);
imwrite(叫做combinedString);
我=我+ 1;
结束
结束
如何拯救这些框架为特定的文件夹吗

答案(2)

图像分析
图像分析 2012年3月1日
看到我的演示:
特别注意这些线:
文件夹= pwd;%文件夹的子文件夹这个m文件的生活。
outputFolder = sprintf (“从% s % s /电影帧”、文件夹、baseFileName);
%如果它不存在已经创建文件夹。
如果~存在(outputFolder“dir”)
mkdir (outputFolder);
结束
好,现在演示:
%演示宏观提取帧,帧意味着从一个avi电影
%和单个帧保存到单独的图像文件。
%计算平均灰度值的颜色通道。
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
imtool关闭所有;%关闭所有imtool数字。
清晰;%擦掉所有现有的变量。
工作空间;%确定工作区面板显示。
字形大小= 14;
%改变当前文件夹的文件夹m文件。
%(下面的代码行是Brett Shoelson Mathworks。)
如果(~ isdeployed)
cd (fileparts ((mfilename)));
结束
%打开犀牛。avi电影附带MATLAB演示。
文件夹= fullfile (matlabroot,“\工具箱\ \ imdemos图像”);
movieFullFileName = fullfile(文件夹,“rhinos.avi”);
%查看它的存在。
如果~存在(movieFullFileName“文件”)
strErrorMessage = sprintf (文件未找到:\ n % s \ nYou可以选择一个新的,或取消的,movieFullFileName);
响应= questdlg (strErrorMessage,“文件未找到”,“好了,选择一个新电影。”,“取消”,“好了,选择一个新电影。”);
如果strcmpi(反应,“好了,选择一个新电影。”)
[baseFileName, folderName FilterIndex] = uigetfile (‘* .avi‘);
如果~ isequal (baseFileName, 0)
movieFullFileName = fullfile (folderName baseFileName);
其他的
返回;
结束
其他的
返回;
结束
结束
试一试
movieInfo = aviinfo (movieFullFileName)
mov = aviread (movieFullFileName);
%的电影(mov);
%确定有多少帧。
numberOfFrames =大小(mov, 2);
numberOfFramesWritten = 0;
%准备一个图显示屏幕的上半部分的图像。
图;
拉= get (0,“拉”);
拉newWindowPosition =[1(4) / 2 - 70拉拉(3)(4)/ 2);
集(gcf,“位置”,newWindowPosition);%最大化图。
%设置(gcf,“位置”,(0,'拉'));%最大化图。
%询问用户是否要写个人帧到磁盘。
promptMessage = sprintf (“你想保存单个帧单个磁盘文件?”);
按钮= questdlg (promptMessage,“拯救个人帧吗?”,“是的”,“不”,“是的”);
如果比较字符串(按钮,“是的”)
writeToDisk = true;
%提取的各个部分文件名。
[文件夹,baseFileName,延续]= fileparts (movieFullFileName);
%组成一个特殊的新的输出所有单独的子文件夹
%电影帧我们要提取并保存到磁盘。
%(别担心- windows可以处理正斜杠在文件夹的名字。)
文件夹= pwd;%文件夹的子文件夹这个m文件的生活。
outputFolder = sprintf (“从% s % s /电影帧”、文件夹、baseFileName);
%如果它不存在已经创建文件夹。
如果~存在(outputFolder“dir”)
mkdir (outputFolder);
结束
其他的
writeToDisk = false;
结束
%循环通过电影,写所有帧。
%每一帧将在一个单独的文件具有独特的名字。
meanGrayLevels = 0 (numberOfFrames, 1);
meanRedLevels = 0 (numberOfFrames, 1);
meanGreenLevels = 0 (numberOfFrames, 1);
meanBlueLevels = 0 (numberOfFrames, 1);
帧= 1:numberOfFrames
%从电影中提取帧结构。
thisFrame = mov .cdata(框架);
%显示它
hImage =情节(1、2、1);
图像(thisFrame);
广场;
标题= sprintf (%的4 d % d帧。帧,numberOfFrames);
标题(标题,“字形大小”、字形大小);
drawnow;%强制刷新窗口。
%图像数组写入输出文件,如果要求。
如果writeToDisk
%构造一个输出图像文件的名字。
outputBaseFileName = sprintf (“帧% 4.4 d.png”、框架);
outputFullFileName = fullfile (outputFolder outputBaseFileName);
%邮票的名称和帧数上的形象。
%在这一点上它只是进入覆盖,
%没有被写入了像素值。
文本(outputBaseFileName 5日,15日,“字形大小”,20);
%提取图像与文本“燃烧”。
frameWithText = getframe (gca);
% frameWithText。cdata图像与文本
%写像素值。
%写出来到磁盘。
imwrite (frameWithText。cdata, outputFullFileName“png”);
结束
%计算平均灰度。
grayImage = rgb2gray (thisFrame);
meanGrayLevels(帧)=意味着(grayImage (:));
%计算平均R, G, B的水平。
meanRedLevels(帧)=平均(平均(thisFrame (:,: 1)));
meanGreenLevels(帧)=平均(平均(thisFrame (:,: 2)));
meanBlueLevels(帧)=平均(平均(thisFrame (:,:, 3)));
%画出的意思是灰色的水平。
hPlot =情节(1、2、2);
持有;
情节(meanGrayLevels“k -”,“线宽”2);
持有;
情节(meanRedLevels的r -);
情节(meanGreenLevels“g -”);
情节(meanBlueLevels“b -”);
%把标题后面因为情节()擦除现有的标题。
标题(“意思是灰色的水平”,“字形大小”、字形大小);
如果帧= = 1
包含(的帧数);
yLabel (“灰度”);
%得到大小预先配置的数据后,如果我们读
%的电影从磁盘。
[行列numberOfColorChannels] =大小(thisFrame);
结束
%更新用户与进步。在命令窗口中显示。
如果writeToDisk
progressIndication = sprintf (帧% d % 4 d写道。帧,numberOfFrames);
其他的
progressIndication = sprintf (“处理帧% % d的4 d。帧,numberOfFrames);
结束
disp (progressIndication);
%增加帧数(最终应该= numberOfFrames
%,除非发生了一个错误)。
numberOfFramesWritten = numberOfFramesWritten + 1;
结束
%提醒用户,我们就完成了。
如果writeToDisk
finishedMessage = sprintf (“做!它写了% d帧文件夹\ n“% s”、numberOfFramesWritten outputFolder);
其他的
finishedMessage = sprintf (“做!它处理% d帧\ n“% s”的、numberOfFramesWritten movieFullFileName);
结束
disp (finishedMessage);%写入命令窗口。
uiwait(对话框(finishedMessage));%也弹出一个消息框。
%的退出,如果他们没有写任何单个帧到磁盘。
如果~ writeToDisk
返回;
结束
%询问用户是否要从磁盘读取单个帧,
%,他们只是写出来,回到电影和显示它。
promptMessage = sprintf ('你要记得各个帧\ nback从磁盘成电影?\ n(这需要几秒钟)。);
按钮= questdlg (promptMessage,“记得电影吗?”,“是的”,“不”,“是的”);
如果比较字符串(按钮,“不”)
返回;
结束
%读回帧,将它们转换为电影。
%的任何方式我不知道preallocate recalledMovie。
帧= 1:numberOfFrames
%构造一个输出图像文件的名字。
outputBaseFileName = sprintf (“帧% 4.4 d.png”、框架);
outputFullFileName = fullfile (outputFolder outputBaseFileName);
%从磁盘读取的图像。
thisFrame = imread (outputFullFileName);
%将图像转换成一个“电影框架”结构。
recalledMovie(帧)= im2frame (thisFrame);
结束
%摆脱旧形象和情节。
删除(hImage);
删除(hPlot);
%为影片创造新的轴。
次要情节(1、3、2);
;%关闭轴数字。
标题(“电影回忆从磁盘”,“字形大小”、字形大小);
%播放电影的轴。
电影(recalledMovie);
%注意:如果你想在叠加显示图形或文本
%的电影回放你需要像我一样
%(这个文件的顶部,你提取和imshow框架。)
对话框(“用这个演示!”);
%如果你这里发生了一些错误。
stError = lasterror;
strErrorMessage = sprintf (的错误帧提取电影:\ n \ n % s \ n \ nError: % s \ n \ n) '、movieFullFileName stError.message);
uiwait(对话框(strErrorMessage));
结束
1评论
Stephen23
Stephen23 2020年4月20日
注意:这个格式字符串不是documentated的行为:
“帧% 4.4 d.png”
得到前导零的记录方式是:
“帧% 04 d.png”

登录置评。


村落”协议
村落”协议 2016年12月6日
谢谢大家
5个评论
图像分析
图像分析 2021年4月9日
编辑:图像分析 2021年4月9日
帧的数量是由多长时间和多少帧每秒。您可以编写一个新的视频帧速率不同,如果你想要的。
我不这么认为。我认为MP4是一种有损压缩格式,但我不确定。

登录置评。

类别

找到更多的在图像处理和计算机视觉帮助中心文件交换

标签

下载188bet金宝搏

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的