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网络编程之文件下载实例分析
May 20 Python
python用reduce和map把字符串转为数字的方法
Dec 19 Python
Python探索之ModelForm代码详解
Oct 26 Python
python获取多线程及子线程的返回值
Nov 15 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
对python添加模块路径的三种方法总结
Oct 16 Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
浅谈python3打包与拆包在函数的应用详解
May 02 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
Aug 11 Python
python基础之爬虫入门
May 10 Python
python编写五子棋游戏
May 25 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+mysql留言本源码
2009/11/11 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
javascript代码加载优化方法
2011/01/30 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
jQuery解析json数据实例分析
2015/11/24 Javascript
Windows环境下npm install 报错: operation not permitted, rename的解决方法
2016/09/26 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
js实现加载页面就自动触发超链接的示例
2017/08/31 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
vue的全局提示框组件实例代码
2018/02/26 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
微信小程序简单的canvas裁剪图片功能详解
2019/07/12 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
Python 文本文件内容批量抽取实例
2018/12/10 Python
django框架使用方法详解
2019/07/18 Python
Python 多进程、多线程效率对比
2020/11/19 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
安全生产先进个人材料
2014/02/06 职场文书
小学生综合素质评语
2014/04/23 职场文书
母亲节演讲稿
2014/05/27 职场文书
团队拓展活动方案
2014/08/28 职场文书
国庆节标语大全
2014/10/08 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
运动会通讯稿50字
2015/07/20 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
运动会广播稿50字
2015/08/19 职场文书
用CSS3画一个爱心
2021/04/27 HTML / CSS
Nginx的gzip相关介绍
2022/05/11 Servers