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新手们容易犯的几个错误总结
Apr 01 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
Dec 06 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
python3.4 将16进制转成字符串的实例
Jun 12 Python
Python 获取ftp服务器文件时间的方法
Jul 02 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
Jul 23 Python
python issubclass 和 isinstance函数
Jul 25 Python
python3使用GUI统计代码量
Sep 18 Python
Python爬虫使用代理IP的实现
Oct 27 Python
Python 存取npy格式数据实例
Jul 01 Python
python zip()函数的使用示例
Sep 23 Python
Python实现位图分割的效果
Nov 20 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
session在PHP大型web应用中的使用
2011/06/25 PHP
跟我学Laravel之视图 & Response
2014/10/15 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
jQuery的学习步骤
2011/02/23 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
requirejs + vue 项目搭建详解
2017/06/16 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
Python装饰器原理与用法分析
2018/04/30 Python
用pycharm开发django项目示例代码
2018/10/24 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
Python实现像awk一样分割字符串
2020/09/15 Python
python爬取youtube视频的示例代码
2021/03/03 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
公职人员索取回扣检举信
2014/04/04 职场文书
怎样写离婚协议书
2015/01/26 职场文书
离婚纠纷代理词
2015/05/23 职场文书
风雨哈佛路观后感
2015/06/03 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python