使用MATLAB读取视频的每一帧并进行边缘检测

本文介绍了一种使用MATLAB对视频进行逐帧读取并应用Roberts算子进行边缘检测的方法,通过具体代码实现了视频帧的读取、边缘检测及视频合成过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用MATLAB对视频进行逐帧读取

在这一周的某个深夜,我在bilibili上看到一个十分好玩的视频。聪明的up主使用MATLAB将3000多万播放量的影 流 之 主(不知道影 流 之 主的看下面的链接)视频进行逐帧读取,并用Roberts 算子对每一张帧图进行边缘检测,再次生成一张张的边缘检测图,再用这些图来合成视频,属实有趣,因此我也编写了相关代码重现了这个up的操作,具体代码如下:

读取视频帧

out2pic.m

clear;
clc;
se = strel('line',11,90);
path='D:\Matvideo\ylzz.mp4';   %视频存放路径
obj=VideoReader(path);
num=obj.NumberOfFrames;
for i=1:num  %帧数,bilibili那个3000万播放量的影 流 之 主一共有398帧,因此这里的i最终为398
    frame=read(obj,i);
    lujing=strcat('D:\Matvideo\lunkuo\',num2str(i));  %帧图输出路径
    lujing=strcat(lujing,'.jpg');
    imwrite(frame,lujing)
end 
对每一张帧图进行边缘检测

zed.m

close all;
clc;

for i=1:398  %前面所得的视频帧数
    path='D:\Matvideo\lunkuo\'; %帧图路径
     disp(i); 
     path=strcat(path,num2str(i));
    p=strcat(path,'.jpg');
    f=imread(p);
    f=rgb2gray(f);
   roberts=edge(f,'roberts');   %roberts算子
   [m,n]=find(roberts==1);
  %scatter(n,-m,'.');   %  1     去掉注释直接展示
    mh=scatter(n,-m,'.'); %  2     确定输出
    axis([-450 700 -750 400]);   %可依据窗口大小自行调整坐标系
    lujing=strcat('D:\Matvideo\robert\',num2str(i)); %  3    输出存放路径
    lujing=strcat(lujing,'.jpg'); %  4     输出格式为ipg
    saveas(mh,lujing); %  5     保存
    %这里默认是将边缘检测的每一张图片保存,方便后续合成视频;也可以不用保存直接展示,只需将注释编号为1的语句取消注释,将2、3、4、5加上注释即可。但直接展示的话效果不太好,比较卡。
    pause(0.05);
end
将检测出的图片合成为视频

pic2video.m

clear;
clc;

WriterObj=VideoWriter('master of shadow.avi', 'Uncompressed AVI');   %这里输出的路径是默认路径,合成的视频的格式是avi
     %avi格式的话光是影 流 之 主那个14秒的视频都要1个多G,过于高清,可以改为mp4,这样就合成的视频比较小
     %改为mp4格式只需将内容改为:VideoWriter('master of shadow.mp4', 'MPEG-4')
open(WriterObj);
for i=1:398  %帧图数量
  pic='D:\Matvideo\robert\';  %前面边缘检测的图片的存储路径
  pic=strcat(pic,num2str(i));
  ppic=strcat(pic,'.jpg');
  frame=imread(ppic);  % 读取图像,放在变量frame中
  disp(ppic);
  writeVideo(WriterObj,frame);  % 将frame放到变量WriterObj中
end
close(WriterObj);

影 流 之 主:https://www.bilibili.com/video/av62162985?from=search&seid=12457012987452727931

合成的视频:由于csdn上传不了视频,我截个图吧
在这里插入图片描述
在这里插入图片描述
难道这就是你分手的借口~

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值