MATLAB边缘检测/读取视频、帧图存储、合并视频,制作小浪漫,收获小幸运

原理:运用MATLAB进行图像处理;

视频进行逐帧读取,并用Roberts 算子对每一张帧图进行边缘检测,再次生成一张张的边缘检测图,再用这些图来合成视频。


  1. 读取准备好的视频,格式基本无要求;

    %% 读取视频帧,命名为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
  2. 帧图进行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
  3. 第二步的帧图图片合成为视频;

    %% 帧图图片合成为视频,命名为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);

    实例演示:

     简单实用,五分钟学会入手。

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毛八帝丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值