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 xsl文件生成html文件存储示例讲解
Dec 03 Python
让python 3支持mysqldb的解决方法
Feb 14 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
Nov 21 Python
python实现TF-IDF算法解析
Jan 02 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
May 11 Python
使用11行Python代码盗取了室友的U盘内容
Oct 23 Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 Python
python3.8动态人脸识别的实现示例
Sep 21 Python
Django windows使用Apache实现部署流程解析
Oct 12 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 Python
pyqt5打包成exe可执行文件的方法
May 14 Python
Python提取PDF指定内容并生成新文件
Jun 09 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 htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
php简单复制文件的方法
2016/05/09 PHP
PHP实现的简单在线计算器功能示例
2017/08/02 PHP
php curl优化下载微信头像的方法总结
2018/09/07 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
JavaScript实现列表分页功能特效
2015/05/15 Javascript
vue实现可增删查改的成绩单
2016/10/27 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
vue2中的keep-alive使用总结及注意事项
2017/12/21 Javascript
微信小程序通过websocket实时语音识别的实现代码
2020/08/19 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
轻松理解Python 中的 descriptor
2017/09/15 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
python中实现k-means聚类算法详解
2017/11/11 Python
解决yum对python依赖版本问题
2019/07/05 Python
django表单的Widgets使用详解
2019/07/22 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
与UNIX有关的几个名词
2015/09/17 面试题
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
云冈石窟导游词
2015/02/04 职场文书