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复制目录结构脚本代码分享
Mar 06 Python
Python 异常处理的实例详解
Sep 11 Python
Python3学习笔记之列表方法示例详解
Oct 06 Python
Python多层装饰器用法实例分析
Feb 09 Python
Python zip()函数用法实例分析
Mar 17 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
python tkinter界面居中显示的方法
Oct 11 Python
Python实现随机取一个矩阵数组的某几行
Nov 26 Python
PyCharm+PyQt5+QtDesigner配置详解
Aug 12 Python
PyTorch 导数应用的使用教程
Aug 31 Python
使用Python解析Chrome浏览器书签的示例
Nov 13 Python
Python爬虫中Selenium实现文件上传
Dec 04 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动态生成静态HTML网页的代码
2010/03/04 PHP
php中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
JavaScript中Number.NEGATIVE_INFINITY值的使用详解
2015/06/05 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
js使用html2canvas实现屏幕截取的示例代码
2017/08/28 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Python中functools模块函数解析
2017/03/12 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
python pandas生成时间列表
2019/06/29 Python
django 简单实现登录验证给你
2019/11/06 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
Python Django view 两种return的实现方式
2020/03/16 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
C++的几个面试题附答案
2016/08/03 面试题
教师应聘个人求职信
2013/12/10 职场文书
理想演讲稿范文
2014/05/21 职场文书
运动员口号
2014/06/09 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书