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 相关文章推荐
pymongo为mongodb数据库添加索引的方法
May 11 Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 Python
python使用筛选法计算小于给定数字的所有素数
Mar 19 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
python next()和iter()函数原理解析
Feb 07 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 Python
keras多显卡训练方式
Jun 10 Python
详解Python模块化编程与装饰器
Jan 16 Python
Python使用openpyxl复制整张sheet
Mar 24 Python
Pandas数据结构之Series的使用
Mar 31 Python
python使用pycharm安装pyqt5以及相关配置
Apr 22 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 设计模式之 单例模式
2008/12/19 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
JavaScript中this的使用详解
2013/11/08 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
jQuery基础_入门必看知识点
2016/07/04 Javascript
js实现二级导航功能
2017/03/03 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
JavaScript中BOM对象原理与用法分析
2019/07/09 Javascript
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
Python中os.path用法分析
2015/01/15 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
python和c语言哪个更适合初学者
2020/06/22 Python
CSS3 实现的加载动画
2020/12/07 HTML / CSS
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
2013/01/09 HTML / CSS
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
轻松制作精彩视频:Animoto
2018/09/19 全球购物
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
十八大感想感言
2014/02/10 职场文书
上班迟到检讨书范文
2015/05/06 职场文书
收入证明申请书
2015/06/12 职场文书
nginx 配置指令之location使用详解
2022/05/25 Servers
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis