原理:运用MATLAB进行图像处理;
视频进行逐帧读取,并用Roberts 算子对每一张帧图进行边缘检测,再次生成一张张的边缘检测图,再用这些图来合成视频。
-
读取准备好的视频,格式基本无要求;
%% 读取视频帧,命名为Input_video.m; clear; clc; str = strel('line',11,90); %structuring element(,a,b,)以b角度创建长度a的线性结构 % Use the strel function (described below) to create a flat structuring element % 使用strel函数(如下所述)创建平面结构元素 path='E:\0工作室\M语言练习\日常练习\00纯日常\边缘检测\01video.mp4'; %视频存放路径 obj=VideoReader(path);%去指定路径读取视频文件,不能写入音频信号 num=obj.NumberOfFrames;%.NumberOfFrames 视频流帧数 for i=1:num %帧数,1:c,c值小于或等于num值即可 frame=read(obj,i);%每帧读入 Outpath=strcat('E:\0工作室\M语言练习\日常练习\00纯日常\边缘检测\01JPG\',num2str(i)); %帧图输出路径,含转换 Outpath=strcat(Outpath,'.jpg'); imwrite(frame,Outpath); %将图像数据frame写入Outpath指定文件 end
-
帧图进行roberts算子边缘检测,可选择合适区间;坐标系调整对失真有影响;
%% 每帧图进行roberts算子边缘检测,命名为Output_jpg.m; close all; clc; for i=1:286 %前面所得的视频帧数num,可取c值 path='E:\0工作室\M语言练习\日常练习\00纯日常\边缘检测\01JPG\'; %帧图路径 disp(i); %显示变量的值 path=strcat(path,num2str(i));%帧图输出路径 p=strcat(path,'.jpg'); out=imread(p); %从P中读取图像 out=rgb2gray(out); %将 RGB 图像或颜色图转换为灰度图 rob=edge(out,'roberts'); %roberts算子 [m,n]=find(rob==1); %scatter(n,-m,'.'); % 1、去掉注释直接展示 mh=scatter(n,-m,'.'); % 2、确定输出散点图 axis([-100 1400 -700 100]); %可依据窗口大小自行调整坐标系 Outpath=strcat('E:\0工作室\M语言练习\日常练习\00纯日常\边缘检测\01rob\',num2str(i)); % 3、输出存放路径 Outpath=strcat(Outpath,'.jpg'); % 4、输出格式为jpg saveas(mh,Outpath); % 5、保存 %这里默认是将边缘检测的每一张图片保存,方便后续合成视频; %也可以不用保存直接展示,只需将注释1取消;将2、3、4、5加上注释即可。 pause(0.05); %暂时停止执行 end
-
第二步的帧图图片合成为视频;
%% 帧图图片合成为视频,命名为Output_mp4.m; clear; clc; WriterObj=VideoWriter('master of shadow.mp4', 'MPEG-4'); %输出为默认路径,合成的视频的格式是mp4 open(WriterObj); for i=1:286 %帧图数量,帧数num,可取c值 Inpath='E:\0工作室\M语言练习\日常练习\00纯日常\边缘检测\01rob\'; %边缘检测图片的存储路径 Inpath=strcat(Inpath,num2str(i)); Out=strcat(Inpath,'.jpg'); frame=imread(Out); %读取图像,放在变量frame中 disp(Out); %%显示变量的值 writeVideo(WriterObj,frame); %将frame放到变量WriterObj中 end close(WriterObj);
实例演示:
简单实用,五分钟学会入手。