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垃圾回收机制
Feb 12 Python
Swift 3.0在集合类数据结构上的一些新变化总结
Jul 11 Python
python flask安装和命令详解
Apr 02 Python
python 绘制拟合曲线并加指定点标识的实现
Jul 10 Python
PyTorch中常用的激活函数的方法示例
Aug 20 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
Python面向对象封装操作案例详解
Dec 31 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
在Tensorflow中实现leakyRelu操作详解(高效)
Jun 30 Python
Python批量修改xml的坐标值全部转为整数的实例代码
Nov 26 Python
Python基础之函数嵌套知识总结
May 23 Python
Python语言内置数据类型
Feb 24 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下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
PHP高自定义性安全验证码代码
2011/11/27 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
PHP面向对象精要总结
2014/11/07 PHP
php下载文件超时时间的设置方法
2016/10/06 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
2011/02/14 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
js实现input框文字动态变换显示效果
2015/08/19 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
分享19个JavaScript 有用的简写写法
2017/07/07 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
详解小程序横屏方案对比
2020/06/28 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
python网页请求urllib2模块简单封装代码
2014/02/07 Python
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
2018/06/19 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
HTML5文档结构标签
2017/04/21 HTML / CSS
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
火箭队口号
2014/06/18 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
vue如何清除浏览器历史栈
2022/05/25 Vue.js