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使用Flask框架同时上传多个文件的方法
Mar 21 Python
python采集百度百科的方法
Jun 05 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
Python 实现删除某路径下文件及文件夹的实例讲解
Apr 24 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
Django csrf 两种方法设置form的实例
Feb 03 Python
Python3 log10()函数简单用法
Feb 19 Python
python中的句柄操作的方法示例
Jun 20 Python
Python解析命令行读取参数之argparse模块
Jul 26 Python
Python assert关键字原理及实例解析
Dec 13 Python
keras 解决加载lstm+crf模型出错的问题
Jun 10 Python
python 实现体质指数BMI计算
May 26 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传参之传值与传址的区别
2015/04/24 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
2016/11/22 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
javascript中的一些注意事项 更新中
2010/12/06 Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
红米手机抢购的js代码
2014/03/10 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
python的urllib模块显示下载进度示例
2014/01/17 Python
pyenv命令管理多个Python版本
2017/03/26 Python
python如何将两张图片生成为全景图片
2020/03/05 Python
对python中return与yield的区别详解
2020/03/12 Python
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
市场营销专业推荐信
2013/11/03 职场文书
销售心得体会
2014/01/02 职场文书
文案策划求职信
2014/04/14 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
党员争先创优承诺书
2015/01/20 职场文书
事业单位聘任报告
2015/03/02 职场文书
重阳节简报
2015/07/20 职场文书
同乡会致辞
2015/07/30 职场文书
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python
如何利用pygame实现打飞机小游戏
2021/05/30 Python