专栏首页matlab爱好者趣玩matlab图像处理之“时光倒流”と“延时放映”

趣玩matlab图像处理之“时光倒流”と“延时放映”

(图像来源:Reverse软件自带示例)


当你看到上面这张动图的时候,有没有觉得像变魔术一样不可思议呢?一地杂乱无章的瓜子通过摄影师的妙手点拨变成了“MAGIC”,“魔术”给人的是视觉冲击,点破个中缘由就没有那么“神奇”了。采用就是基于“时光倒流”思想对已摄制完成的视频影音倒序处理,归根结底是对视频帧的处理。

除了令人惊奇的“时光倒流”,下面请大家欣赏几幅美轮美奂的延时摄影作品:(图像来源:https://www.sohu.com/a/190975095_173711)


(四季变幻)

(蘑菇成长)

(草莓熟了)


延时摄影同样美的令人窒息,这里就不介绍如何拍摄了,毕竟这是摄影师的事,咱们能做的是对现成的视频进行延时处理。

下面就来说说如何用matlab实现对视频的“时光倒流”和“延时放映”处理。正如上面提到的,这些处理归根结底是对视频图像帧的处理,我们知道视频是由一幅幅图像序列连续放映形成的。因此我们只需要将视频中的图像序列倒着播放就能实现“时光倒流”,将长时视频中的近似帧删除掉就能实现“延时放映”。

在新版本matlab中,VideoReader已作为对视频的文件读取处理的推荐函数,今天的程序也将使用该函数来编写。使用read函数来读取视频中图像帧,采用imrotate函数来调整图像,运用image函数来显示图像。

由于存在视频解码的问题,读取和处理效果可能有差异,但并不影响显示效果。本示例使用MP4格式视频文件,为了方便上传,视频文件全部被做成GIF图像文件。


(原始视频)


1、“时光倒流”处理源代码

clc;close all;clear;
% 读取测试视频,谨防程序出错,请事先准备好视频文件
% 文末有本文测试视频的获取方式
v = VideoReader('test.mp4');
% 获取视频总帧数
numF = v.NumberOfFrames;
% 获取坐标轴句柄
currAxes = axes;
% 隐藏坐标轴
currAxes.Visible = 'off';
% 设置图像在坐标轴中的显示状态
set(gca,'position',[0.25 0 0.5 1]);
% 设置figure属性
set(gcf,'toolbar','none','menubar','none','name','感谢关注matlab爱好者','NumberTitle','off');
% 通过循环倒序读取图像帧
for k = numF-50:-1:5
    % 因为是图像显示,因此没必要每帧都显示
    if mod(k,23) == 0
        % 读取视频帧
        img = read(v,k);
        % 顺时针旋转90度
        img = imrotate(img,-90);
        % 显示图像
        image(img,'Parent',currAxes);
        currAxes.Visible = 'off';
    end
end

时光倒流处理效果图

2、延时放映处理源代码

clc;close all;clear;
% 读取测试视频,谨防程序出错,请事先准备好视频文件
% 文末有本文测试视频的获取方式
v = VideoReader('test.mp4');
% 获取视频总帧数
numF = v.NumberOfFrames;
% 获取坐标轴句柄
currAxes = axes;
% 隐藏坐标轴
currAxes.Visible = 'off';
% 设置图像在坐标轴中的显示状态
set(gca,'position',[0.25 0 0.5 1]);
% 设置figure属性
set(gcf,'toolbar','none','menubar','none','name','感谢关注matlab爱好者','NumberTitle','off');
% 由于拍摄视频时间过短,因此间隔取帧来演示延时放映
% 对于长时视频,建议通过对比图像帧的相似性来确定是否显示
for k = 1:numF
    if mod(k,60) == 0
        img = read(v,k);
        img = imrotate(img,-90);
        image(img, 'Parent',currAxes);
        currAxes.Visible = 'off';
    end
end

延时放映处理效果图

温馨提示:本文中的测试视频(test.mp4)通过网盘形式进行分享,请在公众中号中回复“测试”、“test”获取。关于如何生成保存GIF图像,请阅读历史相关推荐获取。

本文作者:艾木樨

本文分享自微信公众号 - matlab爱好者(matlabaihaozhe),作者:matlab爱好者

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何用matlab制作演示动画并存储

    之前给大家介绍过如何使用matlab绘制静态图像,但是实际应用过程中往往可能需要动态的展示计算结果,因此推出本期内容来介绍如何使用matlab制作演示动画并存储...

    matlab爱好者
  • 排序算法之冒泡排序

    感谢关注matlab爱好者公众号!如果公众号文章对您有帮助,别忘了点击分享和“在看”哦!若您对公众号有什么意见或建议,请在公众号中回复或在任意文章底部留言!

    matlab爱好者
  • 出资500寻大神求解极值问题(答案公布)

    在学习极值寻优过程中一道题可把我给难倒了,苦苦奋斗几日始终无法求的解,故一咬牙一跺脚决定出资五百元寻求一位数学大神来解答我的疑惑,废话不多请看题。

    matlab爱好者
  • 笔记:NEC QTP 第二个实例

    Set testWindow=new ClassJavaWindow testWindow.SetJavaWindow("User Login") Set i...

    超级大猪
  • 犀牛鸟·学问 | 听ACM大师朱松纯谈人生与未来

    2019 ACM中国图灵大会上,腾讯特邀全球著名计算机视觉专家,统计与应用数学、人工智能专家、计算建模奖和赫尔姆霍茨奖获得者朱松纯教授,与犀牛鸟精英人才培养计划...

    腾讯高校合作
  • Windows:将cmd命令行添加到右键中方法

    win10中将命令行cmd添加到右键的方法 Windows cmd 右键 win10 命令行 最近在学python,所以会用到很多库文件,但是有的库文件需要下载...

    marsggbo
  • 到底什么是移动边缘计算?

    CloudBest
  • 《模式识别与智能计算》感知机模型

    感知机模型 按照统计学三要素来写的话: 模型:符号函数 策略:损失函数;误点到超平面的距离之和 算法:利用梯度下降算法进行求解 感知机原理: 感知机...

    用户4492257
  • 面向视频编解码后处理的深度学习方法进展

    接前一帖(适用于视频编码帧间预测分数像素插值的卷积神经网络方法简介),今天继续介绍一类基于人工智能的视频处理技术——深度学习在视频后处理中的应用。 1 背景介绍...

    用户1324186
  • Bootstrap快速上手(一)----右键菜单

    一款软件,除了稳定,功能强大,用户体验也很重要。界面风格和布局的一致性让人在视觉上感觉到这是一个统一的系统,协调的系统,至于采用什么风格及颜色系统,美工和设计...

    令仔很忙

扫码关注云+社区

领取腾讯云代金券