函数1 把视频抽帧,并进行边缘检测,变成灰度图(帧)
function tv2f(VideoPath,p01,p02)
% tv2f 函数用于将视频转换为帧图(trans video to frames)
% 转换后的帧图进行了一次Robrets算子检测
% VideoPath 原视频位置及名称
% p01 原视频帧输出位置
% p02 转换后帧输出位置
ov = VideoReader(VideoPath);
%--------------------------------------------------------------------------
% 这部分用于把原视频的每一帧提取成图片
num = ov.NumFrames;
width=ov.width;
high=ov.Height;
for i = 1:num
frame = read(ov,i);
p1 = strcat(p01,num2str(i));
p1 = strcat(p1,'.jpg');
imwrite(frame,p1);
%----------------------------------------------------------------------
k=i/num*100; % 在屏幕打印出当前进度(百分之……)
k=strcat('进度1/2--',num2str(k));
k=strcat(k,'%');
clc
disp(k);
%----------------------------------------------------------------------
end
%--------------------------------------------------------------------------
% 这部分将每张图片进行边值检测,图片变成灰度图
for i=1:num
k=i/num*100;
k=strcat('进度2/2--',num2str(k));
k=strcat(k,'%');
clc
disp(k);
p1 = strcat(p01,num2str(i));
p1 = strcat(p1,'.jpg');
f = rgb2gray(imread(p1));
realpoints = edge(f,'roberts');
[m,n] = find(realpoints==1);
tp = scatter(n,-m,'.'); % tp,transed-picture
axis([0 width -high 0]);
p2 = strcat(p02,num2str(i));
p2 = strcat(p2,'.jpg');
saveas(tp,p2);
end
end
函数2 把帧合成为视频
function f2v(path1,path2,rate,p1,p2)
% f2v 用于把帧图转换成视频(frames to video)
%
% p1 为帧图完整路径
% p2 为录制视频输出路径
% rate 录制视频帧率
% p1 p2 为录制视频启示帧与结束帧
videoName = path2;
if(exist('videoName','file'))
delete videoName
end
v=VideoWriter(videoName,'MPEG-4');
v.FrameRate=rate;
open(v);
for i=p1:p2
filename = strcat(path1,num2str(i));
filename = strcat(filename,'.jpg');
x = imread(filename);
writeVideo(v,x);
end
close(v);
end
效果在妈妈从小就教育我,有人的地方就有Bad Apple_哔哩哔哩_bilibili