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 返回汉字的汉语拼音
Feb 27 Python
Python中利用原始套接字进行网络编程的示例
May 04 Python
Python操作MySQL数据库9个实用实例
Dec 11 Python
Python注释详解
Jun 01 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 Python
python实现字典(dict)和字符串(string)的相互转换方法
Mar 01 Python
Android分包MultiDex策略详解
Oct 30 Python
python爬虫自动创建文件夹的功能
Aug 01 Python
使用Python写一个量化股票提醒系统
Aug 22 Python
解决django前后端分离csrf验证的问题
Feb 03 Python
使用Python制作一个打字训练小工具
Oct 01 Python
python绘制箱型图
Apr 27 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
PHP处理excel cvs表格的方法实例介绍
2013/05/13 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
PHP实现的解汉诺塔问题算法示例
2018/08/06 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
Jquery ajaxsubmit上传图片实现代码
2010/11/04 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
2015/01/18 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
2019/04/29 NodeJs
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
JavaScript中跨域问题的深入理解
2021/03/04 Javascript
python小技巧之批量抓取美女图片
2014/06/06 Python
Python标准库内置函数complex介绍
2014/11/25 Python
Python fileinput模块使用介绍
2014/11/30 Python
python代码过长的换行方法
2018/07/19 Python
python Kmeans算法原理深入解析
2019/08/23 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
工程预算与管理应届生求职信
2013/10/06 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
财政专业求职信范文
2014/02/19 职场文书
卖车协议书
2014/04/21 职场文书
高中同学会活动方案
2014/08/14 职场文书
2014年党员自我评议对照检查材料
2014/09/20 职场文书
干部作风建设心得体会
2014/10/22 职场文书
教师纪律作风整顿心得体会
2016/01/23 职场文书