练习时长两年半的Matlab

效果展示

最近很火的用matlab对练习时长两年半的cxk的唱跳rap视频进行边缘检测,然后合成视频,趣称练习时长两年半的matlab。下面是效果图奉上。

代码实现

那具体是怎么实现的呢?让我们给出代码和解释。
代码可分为三块,第一块是将视频按帧读取成多张图片然后保存到文件夹中。

se = strel('line',11,90);
path_src='C:\matlab_ws\src.mp4';   %源视频存放路径
obj=VideoReader(path_src);
num=obj.NumberOfFrames;
pathImgOut='.\ImgOut\'%视频拆分为图片的存储路径
%一帧一帧的读取并存储到 pathImgOut
for i=1:num
    frame=read(obj,i);
    lujing=strcat(pathImgOut,num2str(i)); 
    lujing=strcat(lujing,'.jpg');
    imwrite(frame,lujing)
end 

第二块是利用matlab的边缘检测函数对上面得到的多张照片进行边缘检测,检测算法的选择较多,有robert,sobel prewitt,laplacian,canny等,各种算法有不同的特点和适用情况,这里不做展开介绍,详情可以看下面给出的参考链接。如果只是单纯的为了整活,随便选一种即可。之后把检测得到的图像结果保存到另一个文件夹中。
matlab边缘检测算子:https://blog.csdn.net/weixin_36815313/article/details/109899559

pathImgOut2='.\ImgOut2\'%图片边缘检测图片的存储路径
for i=1:num  
    path_src=strcat(pathImgOut,num2str(i));
    p=strcat(path_src,'.jpg');
    f=imread(p);
    f=rgb2gray(f);
    roberts=edge(f,'roberts');   %roberts算子
    [m,n]=find(roberts==1);
    mh=scatter(n,-m,'.'); 
    lujing=strcat(pathImgOut2,num2str(i));
    lujing=strcat(lujing,'.jpg');
    saveas(mh,lujing); 
end

第三块是把第二块得到的边缘检测图像拼成一段视频,最终就是我们想要的视频。

WriterObj=VideoWriter('kbj','MPEG-4')
open(WriterObj);
for i=1:num  %帧图数量
  pic=strcat(pathImgOut2,num2str(i));
  ppic=strcat(pic,'.jpg');
  frame=imread(ppic);  % 读取图像,放在变量frame中
  writeVideo(WriterObj,frame);  % 将frame放到变量WriterObj中
end
close(WriterObj);

合成的视频没有音频,如果需要音频大家可以去一些视频剪辑软件添加音频即可。
下面供上完整代码。


%% 第一部分
clear;
clc;
se = strel('line',11,90);
path_src='C:\matlab_ws\src.mp4';   %源视频存放路径
obj=VideoReader(path_src);
num=obj.NumberOfFrames;
pathImgOut='.\ImgOut\'%视频拆分为图片的存储路径
%一帧一帧的读取并存储到 pathImgOut
for i=1:num
    frame=read(obj,i);
    lujing=strcat(pathImgOut,num2str(i)); 
    lujing=strcat(lujing,'.jpg');
    imwrite(frame,lujing)
end 

%% 第二部分
pathImgOut2='.\ImgOut2\'%图片边缘检测图片的存储路径
for i=1:num  
    path_src=strcat(pathImgOut,num2str(i));
    p=strcat(path_src,'.jpg');
    f=imread(p);
    f=rgb2gray(f);
    roberts=edge(f,'roberts');   %roberts算子
    [m,n]=find(roberts==1);
    mh=scatter(n,-m,'.'); 
    lujing=strcat(pathImgOut2,num2str(i));
    lujing=strcat(lujing,'.jpg');
    saveas(mh,lujing); 
end

%% 第三部分
WriterObj=VideoWriter('kbj','MPEG-4')
open(WriterObj);
for i=1:num  %帧图数量
  pic=strcat(pathImgOut2,num2str(i));
  ppic=strcat(pic,'.jpg');
  frame=imread(ppic);  % 读取图像,放在变量frame中
  writeVideo(WriterObj,frame);  % 将frame放到变量WriterObj中
end
close(WriterObj);


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值