Python中使用摄像头实现简单的延时摄影技术


Posted in Python onMarch 27, 2015

延时摄影(英语:Time-lapse photography)是以一种较低的帧率拍 下图像或者视频,然后用正常或者较快的速率播放画面的摄影技术。在一段延时摄影视频中,物体或者景物缓慢变化的过程被压缩到一个较短的时间内,呈现出平时 用肉眼无法察觉的奇异精彩的景象。延时摄影可以认为是和高速摄影相反的一个过程。延时摄影通常应用在拍摄城市风光、自然风景、天文现象、生物演变等等题材上。”

种草

最近买东西得了个小赠品,是一种可以快速生长的小草,拿回来就种在了办公桌上。今天发芽了,一时兴起打算做个延时摄影,办公室里正好有个非常老旧的640x480摄像头,于是有了下面的这个延时摄影动图(为了上传压缩了画面大小):

Python中使用摄像头实现简单的延时摄影技术

实现


需要准备的:

1) 电脑
2) 摄像头(如果电脑没有的话),淘宝上好多20以下包邮
3) Python 2.7,因为需要使用opencv,所以用Python2
4) opencv的Python binding,去官网上下载,如果不想自己编译,只要到\build\python\2.7\下面就可以找到32位和64位的cv2.pyd,把这个文件直接拷贝到\Python27\Lib\site-packages\即可

代码如下:

import cv2
import time

interval = 20  # seconds
num_frames = 500
out_fps = 24

capture = cv2.VideoCapture(0)
size =(int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),
    int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))
video = cv2.VideoWriter("time_lapse.avi", cv2.cv.CV_FOURCC('I','4','2','0'), out_fps, size)

# for low quality webcams, discard the starting unstable frames
for i in xrange(42):
  capture.read()

# capture frames to video
for i in xrange(num_frames):
  _, frame = capture.read()
  video.write(frame)

  ## Optional, in case you need the frames for GIF or so
  filename = '{:4}.png'.format(i).replace(' ', '0')
  cv2.imwrite(filename, frame)

  print('Frame {} is captured.'.format(i))
  time.sleep(interval)

video.release()
capture.release()

既然是简单的延时摄影,代码也是非常简单的。设定好拍摄间隔,总帧数和输出的帧率,用VideoCapture获取摄像头的图像,用VideoWriter写入视频,考虑到有些劣质摄像头在初始化的时候不稳定(比如我用的这个老式摄像头),在正式捕捉图向前可以考虑略过初始的几十帧,捕捉过程中也可以直接输出图片方便制作GIF或者其他用途。

最后再来一个铁皮盒上水滴蒸发的全过程:

Python中使用摄像头实现简单的延时摄影技术

Python 相关文章推荐
Python实现对象转换为xml的方法示例
Jun 08 Python
利用django如何解析用户上传的excel文件
Jul 24 Python
linux环境下的python安装过程图解(含setuptools)
Nov 22 Python
python写入已存在的excel数据实例
May 03 Python
Python2和3字符编码的区别知识点整理
Aug 08 Python
python3文件复制、延迟文件复制任务的实现方法
Sep 02 Python
Python实现随机取一个矩阵数组的某几行
Nov 26 Python
pytorch逐元素比较tensor大小实例
Jan 03 Python
Python通过VGG16模型实现图像风格转换操作详解
Jan 16 Python
Django Model中字段(field)的各种选项说明
May 19 Python
2021年pycharm的最新安装教程及基本使用图文详解
Apr 03 Python
Python 中 Shutil 模块详情
Nov 11 Python
python根据出生日期返回年龄的方法
Mar 26 #Python
python获取远程图片大小和尺寸的方法
Mar 26 #Python
python使用cStringIO实现临时内存文件访问的方法
Mar 26 #Python
python使用pil生成缩略图的方法
Mar 26 #Python
python实现基于两张图片生成圆角图标效果的方法
Mar 26 #Python
python正则表达式match和search用法实例
Mar 26 #Python
python根据开头和结尾字符串获取中间字符串的方法
Mar 26 #Python
You might like
层叠菜单的动态生成
2006/10/09 PHP
理解PHP5中static和const关键字的区别
2007/03/19 PHP
Ajax PHP简单入门教程代码
2008/04/25 PHP
详解php中的implements 使用
2017/06/13 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
[04:44]显微镜下的DOTA2第二期——你所没有注意到的细节
2014/06/20 DOTA
python的Template使用指南
2014/09/11 Python
Python生成器(Generator)详解
2015/04/13 Python
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
Python中处理字符串的相关的len()方法的使用简介
2015/05/19 Python
Python自动登录126邮箱的方法
2015/07/10 Python
python os.path模块常用方法实例详解
2018/09/16 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
用python批量移动文件
2021/01/14 Python
CSS3 简单又实用的5个属性
2010/03/04 HTML / CSS
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
华为C++笔试题
2014/08/05 面试题
班组长岗位职责
2014/03/03 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
小学班长竞选稿
2015/11/20 职场文书
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js