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实现代码行数统计示例分享
Feb 10 Python
Python实现SQL注入检测插件实例代码
Feb 02 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
pandas DataFrame 交集并集补集的实现
Jun 24 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
python 实现dict转json并保存文件
Dec 05 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
python网络编程socket实现服务端、客户端操作详解
Mar 24 Python
Python实现微信表情包炸群功能
Jan 28 Python
python中pandas.read_csv()函数的深入讲解
Mar 29 Python
Python实现天气查询软件
Jun 07 Python
python数字图像处理:图像简单滤波
Jun 28 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
强烈推荐:php.ini中文版(1)
2006/10/09 PHP
PHP 网页过期时间的控制代码
2009/06/29 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
laravel安装zend opcache加速器教程
2015/03/02 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
用javascript实现给图片加链接
2007/08/15 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
解析javascript图片懒加载与预加载的分析总结
2016/10/27 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
浅谈python中requests模块导入的问题
2018/05/18 Python
python通过微信发送邮件实现电脑关机
2018/06/20 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
python pip如何手动安装二进制包
2020/09/30 Python
python os.rename实例用法详解
2020/12/06 Python
Html5实现用户注册自动校验功能实例代码
2016/05/24 HTML / CSS
阿联酋团购网站:Groupon阿联酋
2016/10/14 全球购物
面料业务员岗位职责
2013/12/26 职场文书
物理学专业求职信
2014/07/04 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
财务会计求职信范文
2015/03/20 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
文明礼仪倡议书
2015/04/28 职场文书
施工现场安全管理制度
2015/08/05 职场文书
校园音乐节目广播稿
2015/08/19 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
python playwright 自动等待和断言详解
2021/11/27 Python
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技
公历12个月名称的由来
2022/04/12 杂记