前言

原本想做视频动漫风格化的,动漫风格化要求图片色块分明,所以用到的是保边缘性极强的双边滤波,但由于双边滤波需要每张图片多次滤波才能出效果,等待时机较长,MATLAB处理循环的能力并不太适合。

事实上本篇文章主要就是教大家如何用matlab简单处理视频,因此我们选择较快的水彩风格化(简易版),但即使是这样长达一分钟的视频处理也足足耗了15分钟

处理效果:

步骤

1.导入视频

使用VideoReader函数可以导入视频,用法如下(2012版以后的matlab支持VideoReader):

movObj=VideoReader(‘test.mp4’);

这样导入的便是一个结构体
我们可以使用

disp(movObj)

或者

get(movObj)

来查看结构体的属性:

VideoReader - 属性:

常规属性:
Name: ‘test.mp4’
Path: ‘E:\bin\matlabPS\edgeMovie’
Duration: 87.7480
CurrentTime: 0.0800
NumFrames: <正在计算…> 了解更多

视频属性:
Width: 1920
Height: 1080
FrameRate: 25
BitsPerPixel: 24
VideoFormat: ‘RGB24’

其中比较重要的属性有:

  • Duration:视频时长(秒)
  • FrameRate:帧率
  • NumFrames:帧数
2.获取每一帧图片
for k=1:movObj.NumFramesframe=read(movObj,k);
end

read(movObj,k)就是提取视频对象第k帧,而视频一共有movObj.NumFrames帧,这些都非常好理解。

3.处理视频每一帧

水彩有一种晕开的感觉,所以我们选择不注重边缘的均值或高斯滤波,再将其与边缘结合
原图:

sobel卷积:
乘不乘以1.2其实差不多,当然也可以选择matlab自带的sobel边缘检测,不过那样的话边缘没有灰度的差异

ed_img=(255-sobelConv2_gray(rgb2gray(frame))).*1.2;function sobelPic=sobelConv2_gray(oriPic)Hx=[-1 0 1;-2 0 2;-1 0 1];Hy=[1 2 1;0 0 0;-1 -2 -1];[rows,cols]=size(oriPic);exPic=uint8(zeros([rows+2,cols+2]));exPic(2:rows+1,2:cols+1)=oriPic;exPic(2:rows+1,1)=oriPic(:,1);exPic(2:rows+1,cols+2)=oriPic(:,cols);exPic(1,2:cols+1)=oriPic(1,:);exPic(rows+2,2:cols+1)=oriPic(rows,:);exPic(1,1)=oriPic(1,1);exPic(rows+2,1)=oriPic(rows,1);exPic(1,cols+2)=oriPic(1,cols);exPic(rows+2,cols+2)=oriPic(rows,cols);Gx=zeros([rows,cols]);Gy=Gx;for ii=1:3for jj=1:3tempPic=double(exPic(ii:rows+ii-1,jj:cols+jj-1));Gx=Gx+tempPic.*Hx(ii,jj);Gy=Gy+tempPic.*Hy(ii,jj);endendsobelPic=uint8(sqrt(Gx.^2+Gy.^2));end


高斯滤波:

ga_img=imgaussfilt(frame,5);


图片合成:
点开看大图效果明显一点

newFrame=uint8(double(ga_img).*double(ed_img)./255);

4.制作新视频

制作新视频首先要用VideoWriter函数创建视频对象

newObj=VideoWriter(‘waterColorResult’);

视频名称为waterColorResult,这里视频格式默认为avi,如果想要mp4格式之类的其他格式,要设置profile属性,例如(mp4格式):

newObj=VideoWriter(‘waterColorResult’,‘MPEG-4’);

设置新视频帧率:
和原视频帧率相同

newObj.FrameRate=movObj.FrameRate;

打开视频对象,并将每一帧写入新视频对象

open(newObj)
for k=1:movObj.NumFramesframe=read(movObj,k);ga_img=imgaussfilt(frame,5);ed_img=(255-sobelConv2_gray(rgb2gray(frame))).*1.2;newFrame=uint8(double(ga_img).*double(ed_img)./255);%下面这一行就是帧的写入writeVideo(newObj,newFrame);
end
close(newObj)
5.进度展示

理论上靠前四部已经能够制作出视频了,但是一个视频处理时间不短,我们需要一个进度显示的功能,类似下面这样:

close all;
fig=figure(1);
fig.NumberTitle='off';for k=1:movObj.NumFrames%一大堆操作%。。。。。。%。。。。。。imshow(newFrame)fig.Name=['Frame:[',num2str(k),'/',num2str(movObj.NumFrames),']'];
end

这样就能在左上角显示处理进度啦:

6.完整代码
function waterColorMov
movObj=VideoReader('test.mp4');newObj=VideoWriter('waterColorResult','MPEG-4');
newObj.FrameRate=movObj.FrameRate;
open(newObj)close all;
fig=figure(1);
fig.NumberTitle='off';tic
for k=1:movObj.NumFramesframe=read(movObj,k);ga_img=imgaussfilt(frame,5);ed_img=(255-sobelConv2_gray(rgb2gray(frame))).*1.2;newFrame=uint8(double(ga_img).*double(ed_img)./255);writeVideo(newObj,newFrame);imshow(newFrame)fig.Name=['Frame:[',num2str(k),'/',num2str(movObj.NumFrames),']'];
end
toc
close(newObj)function sobelPic=sobelConv2_gray(oriPic)Hx=[-1 0 1;-2 0 2;-1 0 1];Hy=[1 2 1;0 0 0;-1 -2 -1];[rows,cols]=size(oriPic);exPic=uint8(zeros([rows+2,cols+2]));exPic(2:rows+1,2:cols+1)=oriPic;exPic(2:rows+1,1)=oriPic(:,1);exPic(2:rows+1,cols+2)=oriPic(:,cols);exPic(1,2:cols+1)=oriPic(1,:);exPic(rows+2,2:cols+1)=oriPic(rows,:);exPic(1,1)=oriPic(1,1);exPic(rows+2,1)=oriPic(rows,1);exPic(1,cols+2)=oriPic(1,cols);exPic(rows+2,cols+2)=oriPic(rows,cols);Gx=zeros([rows,cols]);Gy=Gx;for ii=1:3for jj=1:3tempPic=double(exPic(ii:rows+ii-1,jj:cols+jj-1));Gx=Gx+tempPic.*Hx(ii,jj);Gy=Gy+tempPic.*Hy(ii,jj);endendsobelPic=uint8(sqrt(Gx.^2+Gy.^2));end
end

当然如果不怕处理时间久的话可以尝试别的类型的风格化,and matlab 循环着实有点慢,其实可以考虑一下C++的。。。

原始视频:
链接:https://pan.baidu.com/s/1OMwX1MuDPr_558EBJZ3-FQ
提取码:jkt1

MATLAB 手把手教你如何将视频水彩风格化(简易版)相关推荐

  1. 手把手教你制作AppPreview视频并上传到appStore进行审核

    手把手教你制作AppPreview视频并上传到appStore进行审核 注意,你需要使用iMovie才能够制作AppPreview视频文件,用QuickTime录制的无效! 最终效果 1. 新建一个事 ...

  2. 手把手教你做短视频去水印微信小程序(2-首页)

    手把手教你做短视频去水印微信小程序系列教程(2-首页) 文章目录 手把手教你做短视频去水印微信小程序系列教程(2-首页) 前言 一.顶部banner 二.地址解析 1.整体代码 2. input框输入 ...

  3. Android反编译:手把手教你制作高德地图车机共存版

    Android反编译:手把手教你制作高德地图车机共存版 前言 前期准备 反编译流程 反编译获取有效信息 修改关键信息 修改包名 修改其它配置 生成APK 重新打包成apk 重新签名 绕过校验机制 定位 ...

  4. 人人都能当“苍天哥” 手把手教你制作游戏视频

    作者:小M来源:家用电脑 玩魔兽世界的朋友大多都知道苍天哥这个人物,苍天哥制作了一系列魔兽世界高端职业玩家的游戏视频,其幽默.搞笑的解说风格,广受玩家追捧,一时间成为网络热门人物,目前已经当上了好几个 ...

  5. 无线监控安ftp服务器,手把手教你将监控摄像头视频FTP上传到路由器

    智能摄像头很多,我为什么要用你的这个方法? 家用监控摄像头越来越便宜,在门口装一个,既能震慑小偷,又能防止有人往你的钥匙孔里灌502,好吧,装一个. 目前大部分的家用安防摄像头,都能插SD卡,某米某数 ...

  6. 手把手教你批量剪辑视频

    1.去蓝奏云获取CRVideoMate 2.双击软件安装 3. 主界面分为视频队列区.操作面板区.处理记录区与状态栏. 用户导入或拖视频至视频列表中,设置转换参数,点击[开始处理],静待处理即可. 右 ...

  7. 手把手教你如何给视频快速消音并添加背景音乐

    如果我们想要把视频文件批量地添加自己喜欢的解说或者背景音乐的话,需要怎么操作呢?其实方法并不难,感兴趣的小伙伴们跟我一起来看看具体的操作方法和步骤吧. 一.我们需要先在"固乔科技" ...

  8. 【肝帝游戏】手把手教你python处理视频,越学越有趣,全部源码奉上,不信试试?

    文章目录 亮点:作品展示 推荐系列教程,推荐的一定是好的! 一.前言一定要看!!! 二.下载安装 三.视频转gif 四.视频截取 五.视频Gif缩放 六.视频修剪 七.视频堆叠 八.视频剪辑部分语法 ...

  9. 手把手教你如何向视频中添加转场!原来这么简单!

    Movavi Photo Editor拥有清晰简洁的界面.自动质量改进和智能选择,可以对应用进行化妆,添加滤镜和纹理,使用颜色编码的滑块调整参数,拉直,裁剪和翻转框架等操作,那么怎样添加转场呢?下面我 ...

最新文章

  1. 网络工程师_想要记录下来的一些题_2
  2. Python使用matplotlib绘制柱状图(bar plot)实战:水平条形图、垂直条形图、分组条形图、堆叠条形图
  3. NS2安装错误系列(1)
  4. Interview:算法岗位面试—上海某科技公司算法岗位(偏AI算法,国企)技术面试之BN层的认知、BP的推导、GD优化的几种改进等
  5. 【SA 认证课】来啦 这次陪你过双 11
  6. 【数据竞赛】高质量数据科学竞赛平台汇总
  7. 1Android系统移植与驱动开发概述
  8. linux-分区与硬盘-实战:添加新硬盘
  9. 网络IO演变发展过程和模型介绍
  10. raspberry pi_如何启动新的Raspberry Pi
  11. Docker安装与修改默认工作目录
  12. android sudio连接服务器教程,Android Studio连接手机设备教程
  13. 软件项目管理第4版课后习题[附解析]第七章
  14. 修复win7便签功能
  15. Python 微信公众号文章爬取
  16. 中国体育明星商业价值综合指数孙杨、苏炳添、武大靖列前三位
  17. Mac 下erlang及rabbitmq安装
  18. Vscode :代码缩进forward and backward
  19. android listadapter获取item,通过getChildAt方法取得AdapterView中第n个Item
  20. 基于SSM+LayUI带兴趣推荐学生选课系统设计

热门文章

  1. filters过滤器的简单使用
  2. 推荐花椒直播服务端的 4 个开源项目
  3. 如何获取一个基因家族的所有小麦基因
  4. 中英文停止词表(stopword)
  5. 小程序源码:修复图片音频全新升级带特效喝酒神器小游戏-多玩法安装简单
  6. java 队列线程池_Java线程池Executor使用
  7. 让新股抢跑 -- 富途证券上线港股暗盘交易功能
  8. 标注 画框 转写,亲亲,你做错了没?
  9. ajax资料收集-Ajax文章(教程和实例)---Ajax资源下载(源码和教程)---Ajax规范标准
  10. Codefoeces 581B Luxurious Houses