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 11 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
Nov 07 Python
python使用PIL模块获取图片像素点的方法
Jan 08 Python
Pycharm+Python工程,引用子模块的实现
Mar 09 Python
解决Opencv+Python cv2.imshow闪退问题
Apr 24 Python
Python模拟登录和登录跳转的参考示例
Oct 30 Python
python调用百度API实现人脸识别
Nov 17 Python
python用分数表示矩阵的方法实例
Jan 11 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 Python
Python绘制分类图的方法
Apr 20 Python
python-for x in range的用法(注意要点、细节)
May 10 Python
Python实现简单的俄罗斯方块游戏
Sep 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水印
2007/03/16 PHP
php广告加载类用法实例
2014/09/23 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
Raphael带文本标签可拖动的图形实现代码
2013/02/20 Javascript
jquery实现div拖拽宽度示例代码
2013/07/31 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
判断数组的最佳方法(推荐)
2016/10/11 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
分享Angular http interceptors 拦截器使用(推荐)
2019/11/10 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python操作ssh实现服务器日志下载的方法
2015/06/03 Python
Python制作爬虫抓取美女图
2016/01/20 Python
python中的字典使用分享
2016/07/31 Python
PyQt5实现下载进度条效果
2018/04/19 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
幼儿园课题实施方案
2014/05/14 职场文书
高一军训的心得体会
2014/09/01 职场文书
2015年元旦演讲稿
2014/09/12 职场文书
小平小道观后感
2015/06/09 职场文书
环保宣传语大全
2015/07/13 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书
Python - 10行代码集2000张美女图
2021/05/23 Python