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使用Image处理图片常用技巧分析
Jun 01 Python
python采集百度百科的方法
Jun 05 Python
Python实现计算最小编辑距离
Mar 17 Python
Python常用知识点汇总
May 08 Python
浅谈function(函数)中的动态参数
Apr 30 Python
Python实现的各种常见分布算法示例
Dec 13 Python
Python查找文件中包含中文的行方法
Dec 19 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
Dec 20 Python
python实现合并两个排序的链表
Mar 03 Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
Aug 06 Python
基于python中__add__函数的用法
Nov 25 Python
Python-for循环的内部机制
Jun 12 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
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
php 分库分表hash算法
2009/11/12 PHP
PHP 缓存实现代码及详细注释
2010/05/16 PHP
让PHP以ROOT权限执行系统命令的方法
2011/02/10 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
PHP实现QQ登录的开原理和实现过程
2018/02/04 PHP
Yii框架实现对数据库的CURD操作示例
2019/09/03 PHP
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
BootStrap按钮标签及基本样式
2016/11/23 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
BootStrap导航栏问题记录
2017/07/31 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
vue中的适配px2rem示例代码
2018/11/19 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
Python程序包的构建和发布过程示例详解
2019/06/09 Python
python 哈希表实现简单python字典代码实例
2019/09/27 Python
Python利用全连接神经网络求解MNIST问题详解
2020/01/14 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
Eclipse面试题
2014/03/22 面试题
家长给孩子的表扬信
2014/01/17 职场文书
大学生工作求职信
2014/06/23 职场文书
五一促销活动总结
2014/07/01 职场文书
省级三好学生主要事迹材料
2015/11/03 职场文书
Oracle笔记
2021/04/05 Oracle
如何设计高效合理的MySQL查询语句
2021/05/26 MySQL
CentOS安装Nginx并部署vue
2022/04/12 Servers