zoukankan      html  css  js  c++  java
  • 用Python和摄像头制作简单的延时摄影

    “延时摄影(英语:Time-lapse photography)是以一种较低的帧率拍 下图像或者视频,然后用正常或者较快的速率播放画面的摄影技术。在一段延时摄影视频中,物体或者景物缓慢变化的过程被压缩到一个较短的时间内,呈现出平时 用肉眼无法察觉的奇异精彩的景象。延时摄影可以认为是和高速摄影相反的一个过程。延时摄影通常应用在拍摄城市风光、自然风景、天文现象、生物演变等等题材上。”

    --引自百度百科

    种草

    最近买东西得了个小赠品,是一种可以快速生长的小草,拿回来就种在了办公桌上。今天发芽了,一时兴起打算做个延时摄影,办公室里正好有个非常老旧的640x480摄像头,于是有了下面的这个延时摄影动图(为了上传压缩了画面大小):

    实现

    需要准备的:

    1) 电脑

    2) 摄像头(如果电脑没有的话),淘宝上好多20以下包邮

    3) Python 2.7,因为需要使用opencv,所以用Python2

    4) opencv的Python binding,去官网上下载,如果不想自己编译,只要到uildpython2.7下面就可以找到32位和64位的cv2.pyd,把这个文件直接拷贝到Python27Libsite-packages即可

    代码如下:

     1 import cv2
     2 import time
     3 
     4 interval = 20   # seconds
     5 num_frames = 500
     6 out_fps = 24
     7 
     8 capture = cv2.VideoCapture(0)
     9 size =(int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),
    10        int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)))
    11 video = cv2.VideoWriter("time_lapse.avi", cv2.cv.CV_FOURCC('I','4','2','0'), out_fps, size)
    12 
    13 # for low quality webcams, discard the starting unstable frames
    14 for i in xrange(42):
    15     capture.read()
    16 
    17 # capture frames to video
    18 for i in xrange(num_frames):
    19     _, frame = capture.read()
    20     video.write(frame)
    21 
    22     ## Optional, in case you need the frames for GIF or so
    23     filename = '{:4}.png'.format(i).replace(' ', '0')
    24     cv2.imwrite(filename, frame)
    25 
    26     print('Frame {} is captured.'.format(i))
    27     time.sleep(interval)
    28 
    29 video.release()
    30 capture.release()

    既然是简单的延时摄影,代码也是非常简单的。设定好拍摄间隔,总帧数和输出的帧率,用VideoCapture获取摄像头的图像,用VideoWriter写入视频,考虑到有些劣质摄像头在初始化的时候不稳定(比如我用的这个老式摄像头),在正式捕捉图向前可以考虑略过初始的几十帧,捕捉过程中也可以直接输出图片方便制作GIF或者其他用途。

    最后再来一个铁皮盒上水滴蒸发的全过程:

  • 相关阅读:
    springmvc控制器controller单例问题
    用java求一个整数各位数字之和
    Java实现对List去重
    Oracle 11g修改字符集AL32UTF8为ZHS16GBK
    数据库字符集(AL32UTF8)和客户端字符集(2%)是不同的
    第1个人10,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大?
    用table显示n条记录,每3行换一次颜色,即1,2,3用红色字体,4,5,6用绿色字体,7,8,9用红颜色字体。
    tomcat和jboss的区别
    poj_2486 动态规划
    poj_1464 动态规划
  • 原文地址:https://www.cnblogs.com/frombeijingwithlove/p/4366605.html
Copyright © 2011-2022 走看看