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 26 Python
Python实现的检测网站挂马程序
Nov 30 Python
给Python初学者的一些编程技巧
Apr 03 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
对Python3中的input函数详解
Apr 22 Python
Python使用googletrans报错的解决方法
Sep 25 Python
Python产生一个数值范围内的不重复的随机数的实现方法
Aug 21 Python
python属于软件吗
Jun 18 Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 Python
Django vue前后端分离整合过程解析
Nov 20 Python
讲解Python实例练习逆序输出字符串
May 06 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利用cookie实现访问次数统计代码
2011/05/19 PHP
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
用PHP生成excel文件到指定目录
2015/06/22 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
JavaScript使用focus()设置焦点失败的解决方法
2014/09/03 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
使用RequireJS库加载JavaScript模块的实例教程
2016/06/06 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
vue写一个组件
2018/04/09 Javascript
vue实例中data使用return包裹的方法
2018/08/27 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
vue请求数据的三种方式
2020/03/04 Javascript
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
python3 拼接字符串的7种方法
2018/09/12 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
简单了解Django项目应用创建过程
2020/07/06 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
Yahoo-PHP面试题2
2014/12/06 面试题
简单租房协议书
2014/04/09 职场文书
一分钟演讲稿
2014/04/30 职场文书
医学求职信
2014/05/28 职场文书
篮球比赛口号
2014/06/10 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
初二英语教学反思
2016/02/15 职场文书
500字作文之难忘的同学
2019/12/20 职场文书
使用CSS连接数据库的方式
2022/02/28 HTML / CSS
Python 视频画质增强
2022/04/28 Python