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 相关文章推荐
10款最好的Web开发的 Python 框架
Mar 18 Python
在Python的Tornado框架中实现简单的在线代理的教程
May 02 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
Feb 19 Python
python模仿网页版微信发送消息功能
Feb 24 Python
Python随机函数random()使用方法小结
Apr 29 Python
NumPy 数学函数及代数运算的实现代码
Jul 18 Python
python进程和线程用法知识点总结
May 28 Python
pandas数据处理进阶详解
Oct 11 Python
Numpy之reshape()使用详解
Dec 26 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
Mar 18 Python
python在一个范围内取随机数的简单实例
Aug 16 Python
浅谈如何使用python抓取网页中的动态数据实现
Aug 17 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
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
WINXP下apache+php4+mysql
2006/11/25 PHP
求PHP数组最大值,最小值的代码
2011/10/31 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
Yii框架登录流程分析
2014/12/03 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
Vue keep-alive实践总结(推荐)
2017/08/31 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
python版百度语音识别功能
2019/07/09 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
J2EE面试题
2016/03/14 面试题
婚前财产公证书
2014/04/10 职场文书
《秋游》教学反思
2014/04/24 职场文书
报名委托书
2015/01/29 职场文书
2016年元旦致辞
2015/08/01 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
使用@Value值注入及配置文件组件扫描
2021/07/09 Java/Android
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server
Python+DeOldify实现老照片上色功能
2022/06/21 Python
win10如何更改appdata文件夹的默认位置?
2022/07/15 数码科技