如何提取并保存帧视频? ?
292(30天)
显示旧的评论
我用下面的代码阅读和提取完整的视频帧,但问题是帧存储在“多”如附件图片所示。这不是存储为1. jpg, 2. jpg, 3. jpg .....。要解决这个问题。或者告诉我我们如何提取和存储的整个框架以及如何使用它在任何一个for循环。
clc;
清晰的所有;
关闭所有;
抽搐;
vid = VideoReader (“我:\ \ video1.avi测试”);
numFrames = vid.NumberOfFrames;
n = numFrames;
为我= 1:1:n
帧=阅读(请看,我);
imwrite(框架,“我:\突然\ \测试”int2str(我),“jpg”]);
结束
多= dir (我:\ \突然\ * . jpg *测试”);
为我= 1:1:长度(多)
- - - - - - - - - - - - - - -
- - - - - - - - - - - - - - -
结束
接受的答案
1月
2017年4月4日
编辑:1月
2017年4月4日
显示代码创建文件“1. jpg”,“2. jpg”等等。在得到文件名
dir
他们要求按字母顺序,这不是原来的顺序。解决这个问题:
文件夹=“我:\突然\ \测试”;
为iFrame = 1: n
帧=阅读(vid iFrame);
imwrite(帧,fullfile(文件夹,sprintf (“% 06 d.jpg”iFrame)));
结束
文件列表= dir (fullfile(文件夹,‘* . jpg”));
为iFile = 1:长度(文件列表)
aFile = fullfile(文件夹,文件列表(iFile) . name);
img = imread (aFile);
结束
fullfile
关心文件分隔符。现在改变工作文件夹需要一个修改代码。
“iFile”和“iFrame”是比“我”更descritpive,也可能影子虚数单位。
5个评论
更多的答案(4)
图像分析
2019年1月11日
尽我附加演示就是这么做的,加上一个更有趣的事情。
12个评论
图像分析
2020年6月10日
那不是81行了所以我已经改变一些东西。最新的连接。
但是阅读()不会改变帧的大小。帧是任何存储在视频文件。为什么你认为他们应该有不同的大小,从阅读()返回吗?你在哪里得到你的其他尺寸吗
从
吗?你能把你的视频在一个zip文件吗?
你会注意到我的电话
轴(“上”,“图像”);
这是具体的长宽比不显示不同于实际的宽高比的行和列的数量。所以它显示像素的像素,而不是紧张的像你如果你让次要情节()决定自己如何视窗的大小(轴控制)。当然显示的比例可能会略有不同,如果您的显示器或适配器没有方形像素。
但无论如何,行和列的数量不会改变不管显示时的样子。再一次,我问你怎么有那些不同的维度和为什么你信任的是“真”值超过了MATLAB。
当你说“我从一个视频帧601 x651并完成视频帧368 x642”到底是“开始”,“完成”的究竟是什么?你创建电影有不同的脚本,你以为你创造601 x651 ?如果是这样,附加脚本还,所以我可以检查它。取决于你的框架,如果你使用getframe(),然后你可以得到显示大小,而不是实际的图像大小。
不论真假,其他有趣的电影制作演示均附呈。
马丁尼班维尔
2020年6月10日
你好,我是新使用Matlab所以我不能弄清楚为什么我的视频的大小变化时使用你的演示“ExtractMovieFrames.m”。我从一个视频帧等于:身高= 651,宽度= 601,当我使用你的演示帧提取不准确:
即它提取视频帧和的一半一半的背景图(见提供的图片)。此外,提取帧也成为以下尺寸:身高= 277,宽度= 255。我没有改变任何东西,从你的脚本。我刚读了我的视频。上你会发现我对你的视频的一小部分。谢谢你的帮助。
图像分析
2020年6月10日
马丁尼,大小变化的原因当各个帧保存到磁盘,然后重建,新电影时的帧与帧数印。没有函数基MATLAB燃烧文字到图片。有如果你有计算机视觉系统工具箱的函数insertText(),但大多数人都没有。所以帧的邮票我不得不使用getframe()就像一个屏幕截图的然而许多像素图像显示在屏幕上,而不是实际尺寸。我可以调整到原始,但这可能会让它看起来很模糊。或者我可以有一个选择没有邮票框进去之前调用imwrite ()。太多的选择将会使代码更加复杂和intimitdating给用户。你想吃它:
- 原始大小没有帧邮票,除非用户计算机视觉工具。
- 不同的大小,帧邮票
- 原始大小和帧邮票(看起来模糊)
所以我基本上需要问用户这些问题questdlg()然后添加代码,说类似这样:
如果hasComputerVisionToolbox
%用户计算机视觉的工具箱
%我们可以使用insertText()燃烧肋骨戳到图片,如果需要的话。
如果wantsFrameStamps
thisFrame = insertText (thisFrame、位置、标题)%燃烧文本到图像
结束
imwrite (thisFrame outputFullFileName)%原始大小的图像
其他的
%没有计算机视觉的工具箱,所以不能用insertText ()。必须使用text ()。
如果wantsFrameStamps
文本(x, y,标题);%把文本放在覆盖,而不是烧成图像。
thisFrame = getframe (gca)%的截图就在这个轴。
如果wantsSameSize
%截图没有相同的尺寸。需要迫使它有相同的大小。
thisFrame = imresize (thisFrame [originalRows originalColumns])
结束
其他的
% thisFrame =原始图像(无关)
结束
imwrite (thisFrame outputFullFileName)%不同的大小,或大小相同,但是很模糊
结束
图像分析
2020年6月10日
好,附件是新的演示与所有这些选项包括在内。
%演示提取帧,帧意味着从一个电影和单个帧保存到单独的图像文件。
%然后重建一个新电影的回忆保存的图像从磁盘。
%计算平均灰度值的颜色通道
%和检测帧与前一帧之间的区别。
%说明VideoReader和VideoWriter类的使用。
% Mathworks演示(不同的比我)位于//www.tatmou.com/help/matlab/examples/convert-between-image-sequences-and-video.html
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
imtool关闭所有;%关闭所有imtool数字。
清晰;%擦掉所有现有的变量。
工作空间;%确定工作区面板显示。
字形大小= 22;
%初始化选择。
wantsFrameStamps = false;
wantsSameSize = true;
writeToDisk = false;
outputMovieFullFileName = [];
%打开犀牛。avi电影附带MATLAB演示。
%的第一个文件夹,它生活在。
文件夹= fileparts ((“rhinos.avi”));%确定演示文件夹(适用于所有版本)。
%选择其中一个演示电影随图像处理工具箱。
%注释掉另一个。
inputMovieFullFileName = fullfile(文件夹,“rhinos.avi”);
% movieFullFileName = fullfile(文件夹,“traffic.avi”);%替代演示电影。
%查看这电影文件是否存在。
如果~存在(inputMovieFullFileName“文件”)
strErrorMessage = sprintf (文件未找到:\ n % s \ nYou可以选择一个新的,或取消的,inputMovieFullFileName);
响应= questdlg (strErrorMessage,“文件未找到”,“好了,选择一个新电影。”,“取消”,“好了,选择一个新电影。”);
如果strcmpi(反应,“好了,选择一个新电影。”)
[baseFileNameNoExt, folderName FilterIndex] = uigetfile (‘* .avi‘);
如果~ isequal (baseFileNameNoExt, 0)
inputMovieFullFileName = fullfile (folderName baseFileNameNoExt);
其他的
返回;
结束
其他的
返回;
结束
结束
试一试
% VideoReader对象开放阅读框架从现有的电影。
videoReaderObject = VideoReader (inputMovieFullFileName)
%确定有多少帧。
numberOfFrames = videoReaderObject.NumFrames;
vidHeight = videoReaderObject.Height;
vidWidth = videoReaderObject.Width;
numberOfFramesWritten = 0;
%准备一个图显示屏幕的上半部分的图像。
hFig =图(“名字”,的视频演示图像分析师”,“NumberTitle”,“关闭”);
拉% =(0,'拉');
%全屏放大图。
%设置(gcf,“单位”,“归一化”,“OuterPosition”, [0、0.04、1、0.96]);%旧风格
hFig。WindowState =“最大化”;%最大化的新方法。
%询问用户是否要写个人帧到磁盘。
promptMessage = sprintf (“你想保存单个帧单个磁盘文件?”);
按钮= questdlg (promptMessage,“拯救个人帧吗?”,“是的”,“不”,“是的”);
如果比较字符串(按钮,“是的”)
writeToDisk = true;
%提取的各个部分文件名。
(文件夹、baseFileNameNoExt扩展)= fileparts (inputMovieFullFileName);
%组成一个特殊的新的输出所有单独的子文件夹
%电影帧我们要提取并保存到磁盘。
%(别担心- windows可以处理正斜杠在文件夹的名字。)
文件夹= pwd;%文件夹的子文件夹这个m文件的生活。
outputFolder = sprintf (“从% s % s /电影帧”、文件夹、baseFileNameNoExt);
%如果它不存在已经创建文件夹。
如果~存在(outputFolder“dir”)
mkdir (outputFolder);
结束
%得到他们想要的选项是否邮票提取帧和新电影帧数。
hasComputerVisionToolbox =许可证(“测试”,“Video_and_Image_Blockset”);%检查计算机视觉系统工具箱。
%的用户想要时间戳?
promptMessage = sprintf (“你想提取的帧与帧编号邮票?”);
titleBarCaption =“邮票帧数?”;
buttonText = questdlg (promptMessage titleBarCaption,“是的”,“不”,“是的”);
如果包含(buttonText“是的”,“IgnoreCase”,真正的)
wantsFrameStamps = true;
如果hasComputerVisionToolbox
%不需要问,因为我们可以燃烧的邮票在原始分辨率。
%因为他们有计算机视觉的工具箱,我们可以,我们不妨用原来的大小。
wantsSameSize = true;
其他的
%需要做轴的屏幕截图,如果他们想要邮票和帧没有计算机视觉工具。
promptMessage = sprintf (“你要提取的帧与原始帧大小相同吗?”);
buttonText = questdlg (promptMessage titleBarCaption,“是的”,“不”,“是的”);
如果包含(buttonText“是的”,“IgnoreCase”,真正的)
wantsSameSize = true;
其他的
wantsSameSize = false;
结束
结束
其他的
%的用户不希望框架邮票。
wantsFrameStamps = false;
wantsSameSize = true;%如果不是冲压,不妨使用原始的大小。
结束
其他的
%的用户不想写磁盘和重现电影的框架。
writeToDisk = false;
结束
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%循环通过电影,写所有帧。
%每一帧将在一个单独的文件具有独特的名字。
meanGrayLevels = 0 (numberOfFrames, 1);
meanRedLevels = 0 (numberOfFrames, 1);
meanGreenLevels = 0 (numberOfFrames, 1);
meanBlueLevels = 0 (numberOfFrames, 1);
为帧= 1:numberOfFrames
%从电影中提取帧结构。
thisFrame =阅读(videoReaderObject,框架);
%显示它
hImage =次要情节(2 2 1);
图像(thisFrame);
标题= sprintf (%的4 d % d帧。帧,numberOfFrames);
标题(标题,“字形大小”、字形大小);
轴(“上”,“图像”);%显示刻度线,纵横比正确的。
drawnow;%强制刷新窗口。
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%可选,只有如果你想保存帧中提取。
%图像数组写入输出文件,如果要求。
如果writeToDisk
%构造一个输出图像文件的名字。
outputBaseFileName = sprintf (“帧% 4.4 d.png”、框架);
outputFullFileName = fullfile (outputFolder outputBaseFileName);
如果hasComputerVisionToolbox
%用户计算机视觉的工具箱
%我们可以使用insertText()燃烧肋骨戳到图片,如果需要的话。
如果wantsFrameStamps
thisFrame = insertText (thisFrame, 5, 5],标题,“字形大小”,20岁,“输入TextColor”,“黄色”,“BoxColor”,“黑”);%燃烧文本到图像
结束
imwrite (thisFrame outputFullFileName)%原始大小的图像
其他的
%没有计算机视觉的工具箱,所以不能用insertText ()。必须使用text ()。
如果wantsFrameStamps
%邮票的名称和帧数上的形象。
%在这一点上它只是进入覆盖,
%没有被写入了像素值。
标题文本(5,5日,“字形大小”,20);
%提取图像与文本“燃烧”。
frameWithText = getframe (gca);%的截图就在这个轴。
% frameWithText。cdata图像与文本
%写像素值。
文本(x, y,标题);%把文本放在覆盖,而不是烧成图像。
thisFrame = frameWithText.cdata;
如果wantsSameSize
%截图没有相同的尺寸。需要迫使它有相同的大小。
thisFrame = imresize (thisFrame [vidHeight vidWidth]);
%是一样的大小,但可能是模糊的。
结束
其他的
% thisFrame =原始图像(无关)
%图像有不同的大小
结束
%写出来到磁盘。
imwrite (thisFrame outputFullFileName,“png”);
结束
结束
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%计算平均灰度。
grayImage = rgb2gray (thisFrame);
meanGrayLevels(帧)=意味着(grayImage (:));
%计算平均R, G, B的水平。
meanRedLevels(帧)=平均(平均(thisFrame (:,: 1)));
meanGreenLevels(帧)=平均(平均(thisFrame (:,: 2)));
meanBlueLevels(帧)=平均(平均(thisFrame (:,:, 3)));
%画出的意思是灰色的水平。
hPlot =情节(2 2 2);
持有从;
情节(meanGrayLevels“k -”,“线宽”3);
持有在;
情节(meanRedLevels的r -,“线宽”2);
情节(meanGreenLevels“g -”,“线宽”2);
情节(meanBlueLevels“b -”,“线宽”2);
网格在;
%把标题后面因为情节()擦除现有的标题。
标题(“灰色的水平意味着强度”,“字形大小”、字形大小);
如果帧= = 1
包含(的帧数);
ylabel (“灰度”);
%得到大小预先配置的数据后,如果我们读
%的电影从磁盘。
(行、列,numberOfColorChannels) = (thisFrame)大小;
结束
%更新用户与进步。在命令窗口中显示。
如果writeToDisk
progressIndication = sprintf (帧% d % 4 d写道。帧,numberOfFrames);
其他的
progressIndication = sprintf (“处理帧% % d的4 d。帧,numberOfFrames);
结束
disp (progressIndication);
%增加帧数(最终应该= numberOfFrames
%,除非发生了一个错误)。
numberOfFramesWritten = numberOfFramesWritten + 1;
现在让我们做差分的百分比
α= 0.5;
如果帧= = 1
背景= thisFrame;
其他的
在每一帧背景稍微变化百分比。
%的背景是一个加权平均每次所有之前的背景帧
%减少重量进一步在时间框架。
%的背景(t + 1) =(1α)*我+α*背景(t)
背景thisFrame +α=(1α)* *背景;
结束
%显示/适应背景变化。
次要情节(2、2、3);
imshow(背景);
标题(自适应背景的,“字形大小”、字形大小);
轴(“上”,“图像”);%显示刻度线,纵横比正确的。
%计算帧与背景之间的区别。
differenceImage = thisFrame - uint8(背景);
%和大津法阈值。
grayImage = rgb2gray (differenceImage);%转换为灰度
thresholdLevel = graythresh (grayImage);%得到阈值。
binaryImage = imbinarize (grayImage thresholdLevel);%的二值化
%画出二进制图像。
次要情节(2、2、4);
imshow (binaryImage);
标题(“图像的关键区别”,“字形大小”、字形大小);
轴(“上”,“图像”);%显示刻度线,纵横比正确的。
结束
包含(hPlot的帧数,“字形大小”、字形大小);
ylabel (hPlot“灰度”,“字形大小”、字形大小);
传奇(hPlot的整体亮度的,“红色频道”,“绿色通道”,“蓝色通道”,“位置”,“西北”);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%提醒用户,我们就完成了。
如果writeToDisk
finishedMessage = sprintf (“做!它写了% d帧文件夹\ n“% s”、numberOfFramesWritten outputFolder);
其他的
finishedMessage = sprintf (“做!它处理% d帧\ n“% s”的、numberOfFramesWritten inputMovieFullFileName);
结束
disp (finishedMessage);%写入命令窗口。
uiwait(对话框(finishedMessage));%也弹出一个消息框。
%的退出,如果他们没有写任何单个帧到磁盘。
如果~ writeToDisk
返回;
结束
%关闭旧图。
关闭(hFig);
%询问用户是否要从磁盘读取单个帧,
%,他们只是写出来,回到电影和显示它。
promptMessage = sprintf ('你要记得各个帧\ nback从磁盘成电影?\ n(这需要几秒钟)。);
按钮= questdlg (promptMessage,“记得电影吗?”,“是的”,“不”,“是的”);
如果包含(按钮,“是的”)
%的名称创建一个文件输出的电影。这将是相同的作为输入,但“新”在它的前面。
(文件夹、baseFileNameNoExt等)= fileparts (inputMovieFullFileName);
如果(包含文件夹,“程序文件”,“IgnoreCase”,真正的)
%的窗户不允许文件写入程序文件的文件夹,所以它的存在,改变这个m文件的文件夹。
文件夹= pwd;
结束
baseFileName = sprintf (“新% s.avi”,baseFileNameNoExt);%预谋“新”的原始文件的名字。
outputMovieFullFileName = fullfile(文件夹,baseFileName);
%创建VideoWriter对象编写视频一个新的,不同的文件。
videoWriterObject = VideoWriter (outputMovieFullFileName);
%我们想匹配的帧率如果我们创建一个输出影片。
videoWriterObject。帧速率= videoReaderObject.FrameRate;
打开(videoWriterObject);
%摆脱旧形象和情节。
删除(hImage);
删除(hPlot);
%为影片创造新的轴。
hFig2 =图;
次要情节(1 1 1);
%全屏放大图。
hFig2。WindowState =“最大化”;
轴从;%关闭轴数字。
字形大小= 15;
%从磁盘读取的帧,并将它们转换为电影。
% Preallocate recalledMovie,将一个结构数组。
%的第一单元阵列的帧。
allTheFrames =细胞(numberOfFrames, 1);
allTheFrames (,) = {0 (vidHeight vidWidth 3,“uint8”)};
%下得到一个单元阵列colormaps。
allTheColorMaps =细胞(numberOfFrames, 1);
allTheColorMaps (:) = {0 (256 3)};
%现在把这些阵列的结构。
recalledMovie =结构(cdata的allTheFrames,“colormap”allTheColorMaps)
为帧= 1:numberOfFrames
%构造一个输出图像文件的名字。
outputBaseFileName = sprintf (“帧% 4.4 d.png”、框架);
outputFullFileName = fullfile (outputFolder outputBaseFileName);
%从磁盘读取的图像。
thisFrame = imread (outputFullFileName);
如果帧= = 1
gAxes = imshow (thisFrame)
%全屏放大图。unmaximizes imshow ()。
hFig2。WindowState =“最大化”;
其他的
gAxes。CData = thisFrame;
结束
标题= sprintf (“回忆帧% d % 4 d从磁盘……”帧,numberOfFrames);
标题(标题,“字形大小”、字形大小);
%不幸的是没有显示全屏的图片,如果你想让它黄化屏幕,
%之间闪光烦人的小屏幕,全屏,所以别去尝试。
drawnow;
%将图像转换成一个“电影框架”结构。
recalledMovie(帧)= im2frame (thisFrame);
%这个框架写出来一个新的视频文件在磁盘上。
writeVideo (videoWriterObject thisFrame);
结束
关闭(videoWriterObject);
%的电影现在创建完成。NewRhinos文件”。avi '现在在磁盘上。
%关闭旧图。
关闭(hFig2);
%使用电影()电影在一个新的图。
hFig3 =图;%带来了一个新的数字。
%放大图实际大小的视频。
hFig3。WindowState =“最大化”;
集(hFig3,“单位”,“像素”,“OuterPosition”(0、0.04、vidWidth vidHeight])
%标题(“玩电影回忆和由单个磁盘文件”,“字形大小”,字形大小);
%播放电影的轴。不幸的是,似乎没有一种全屏显示。
电影(recalledMovie);% recalledMovie电影结构变量,而不是文件名。
%注意:如果你想在叠加显示图形或文本
%的电影回放你需要像我一样
%(你一次提取和imshow框架)。
%关闭旧图。
关闭(hFig3);
结束
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%询问用户是否想玩电影在外部的球员,像Windows媒体播放器。
promptMessage = sprintf (“你想玩电影在外部(non-MATLAB)的球员吗?”);
按钮= questdlg (promptMessage,“播放电影吗?”,“是的”,“不”,“是的”);
如果包含(按钮,“是的”)& &(包含电脑,“赢”,“IgnoreCase”,真正的)& & isfile (outputMovieFullFileName)
winopen (outputMovieFullFileName);
结束
对话框(“用这个演示!”);
流(“用这个演示! \ n”);
抓我
%如果你这里发生了一些错误。
strErrorMessage = sprintf (的错误帧提取电影:\ n \ n % s \ n \ nError: % s \ n \ n) '、inputMovieFullFileName ME.message);
uiwait(对话框(strErrorMessage));
结束
马丁尼班维尔
2020年6月19日
在上面的代码编写:
%从磁盘读取的帧,并将它们转换为电影。
% Preallocate recalledMovie,将一个结构数组。
%的第一单元阵列的帧。
allTheFrames =细胞(numberOfFrames, 1);
allTheFrames (,) = {0 (vidHeight vidWidth 3,“uint8”)};
%下得到一个单元阵列colormaps。
allTheColorMaps =细胞(numberOfFrames, 1);
allTheColorMaps (:) = {0 (256 3)};
%现在把这些阵列的结构。
recalledMovie =结构(cdata的allTheFrames,“colormap”allTheColorMaps)
如果我想生成一个灰度级的电影,而不是一个颜色的电影。我细化recalledMovie结构如何?
到目前为止,我有一个矩阵填充灰度强度值从0到1的帧。我试着玩的结构,但未能使其工作。
谢谢你!
图像分析
2020年6月19日
试试这个。但是冲浪(),而是使用imread(),然后rgb2gray()如果需要转换为灰度。
%演示创建一个电影文件从一个高斯分布,然后可以选择将它保存到磁盘作为灰度MP4视频文件。
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
%初始化代码
清晰的所有;
clc;
工作空间;
numberOfFrames = 61;
x1d = linspace (3 3 numberOfFrames);
y1d = x1d;
t = linspace (0、5、numberOfFrames);
hFigure =图;
%建立电影结构。
vidHeight = 344;
vidWidth = 446;
%需要改变从默认渲染器zbuffer让它正常工作。
% openGL不工作和画家太缓慢。
集(gcf,渲染器的,“zbuffer”);
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
%创建电影。
fullFileName = fullfile (pwd,“Deleteme.mp4”);
%作家对象创建一个视频文件名称。
% VideoWriter对象必须有一个输入参数,否则你得到jpg。
%确定用户指定的格式:
(文件夹、baseFileName ext) = fileparts (fullFileName);
开关低(ext)
情况下“.jp2”
形象=“档案”;
情况下“mp4”
形象=mpeg - 4的;
否则
% avi或其他一些无效的扩展。
形象=未压缩的AVI的;
结束
writerObj = VideoWriter (fullFileName,概要文件);
打开(writerObj);
%得到每个像素的x和y坐标列表在x - y平面上。
(x, y) = meshgrid (x1d y1d);
%这个循环开始后,一定不要调整窗口的显示帧,否则你将无法保存它。
为frameIndex = 1: numberOfFrames
z = exp(-(固定型(frameIndex)) ^ 2 - (y - t (frameIndex)) ^ 2);
班重置;
%选择:全屏放大图。
%设置(gcf‘单位’,‘标准化’,‘Outerposition’, (0, 0, 1, 1));
冲浪(x, y, z);
轴(“紧”)
zlim ([0, 1]);
标题= sprintf (“帧# % d % d, t = % .1f 'frameIndex numberOfFrames, t (frameIndex));
标题(标题,“字形大小”15);
drawnow;
thisFrame = getframe (gca);
%这个框架写出来一个新的视频文件。
grayImage = rgb2gray (thisFrame.cdata);
writeVideo (writerObj grayImage);
结束
关闭(writerObj);
%显示当前文件夹面板,这样他们就可以看到他们的新创建的文件。
cd(文件夹);
filebrowser;
如果(包含电脑,“赢”)
%如果使用Windows,在默认的视频播放器播放这个电影。
winopen (fullFileName);
结束
消息= sprintf (“完成创建电影文件\ n % s。与演示\ n \ nDone !”,fullFileName);
uiwait (helpdlg(消息));
Guram Tsirekizde
2019年3月16日
我很新的matlab,所以愚蠢的问题。如何显示例如上面的第一个图像矩阵代码?提前谢谢你。
1评论
图像分析
2019年3月17日
videoObject = VideoReader (movieFullFileName)
%从电影中提取第一帧结构。
thisFrame =阅读(videoObject, 1);
一个错误发生
无法完成的行动,因为页面所做的更改。重新加载页面更新状态。
你也可以从下面的列表中选择一个网站
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。