本期教大家将编写一个小脚本用树莓派来捕获多个图像,然后可以将这些图像组合成动画GIF,使用延时摄影功能,可以在几秒钟内查看非常慢的事情。

我们需要用到ImageMagick,这是一个用于图像处理的命令行程序。要安装ImageMagick,请在终端窗口中运行以下命令:

sudo apt-get updatesudo apt-get install imagemagick -y

使用树莓派的延时动画。延时摄影使用长时间拍摄的多个图像,然后将这些图像拼接在一起以产生动画的图像序列。如果以前从未见过延时,我给大家找到一张GIF图可以直观的看到。

使用拍照功能,需要脚本的支持,我们先编写一个脚本。

#/home/pi/timelapse.pyfrom picamera import PiCameracamera = PiCamera()
camera.capture('/home/pi/Desktop/image.jpg')

保存代码,命令行运行,python /home/pi/timelapse.py

就可看看桌面有一张名叫image.jpg的图片了。

保存代码,命令行运行,python /home/pi/timelapse.py

就可看看桌面有一张名叫image.jpg的图片了。

拍摄多张图片

可以使用相机模块拍摄多个图像,方法是使用循环捕获图像。修改您的代码文件以包含for循环。在此示例中,Pi Camera将捕获10个图像:

from picamera import PiCameracamera = PiCamera()for i in range(10):camera.capture('image.jpg')

再次保存脚本并运行(F5)程序。然后查看文件管理器,查看已创建的内容,如果你看到只有一张图片,这是拍摄的最后一张图片。这是因为每个图像具有相同的文件名,所以它被下一个拍摄的图像覆盖了。稍微修改脚本来解决问题:

from picamera import PiCameracamera = PiCamera()for i in range(10):camera.capture('image{0:04d}.jpg'.format(i))

保存运行,这时再查看,就可以看到10张图片了。

制作GIF图

我们看看如何将之前拍摄的连续的图片转换为动画GIF。这时我们就需要ImageMagick。ImageMagick是一个命令行程序,可用于处理图像。首先,打开终端(Ctrl+Alt+t)并输入以下内容:

convert -delay 10 -loop 0 image*.jpg animation.gif

命令 -delay选项 设置帧之间的时间量(以百分之一秒为单位)。-loop选项设置GIF循环的次数。在这里0告诉它永远循环。需要一些时间来运行,等待完成,应该可以在文件管理器中看到 animation.gif 文件,双击它并在图像查看器中观看动画。这可能是一个相当大的文件。与所有命令行程序一样,可以在Python中调用ImageMagick。只需要使用os库,如下所示:

from picamera import PiCamera
from os import systemcamera = PiCamera()for i in range(10):camera.capture('image{0:04d}.jpg'.format(i))system('convert -delay 10 -loop 0 image*.jpg animation.gif')
print('done')

这里生成的文件将是非常大的文件,下面教大家如何压缩减小文件大小。重新打开之前的代码文件,我们做如下修改:

from picamera import PiCamera
from os import systemcamera = PiCamera()
camera.resolution = (1024, 768)for i in range(10):camera.capture('image{0:04d}.jpg'.format(i))system('convert -delay 10 -loop 0 image*.jpg animation.gif')

重新设置了图像的分辨率。

我们在添加延时,来拍摄间隔的照片。我们重新修改代码如下:

from picamera import PiCamera
from os import system
from time import sleepcamera = PiCamera()
camera.resolution = (1024, 768)for i in range(10):camera.capture('image{0:04d}.jpg'.format(i))sleep(60)system('convert -delay 10 -loop 0 image*.jpg animation.gif')
from picamera import PiCamera
from os import system
from time import sleepcamera = PiCamera()
camera.resolution = (1024, 768)for i in range(10):camera.capture('image{0:04d}.jpg'.format(i))sleep(60)system('convert -delay 10 -loop 0 image*.jpg animation.gif')

我们设置成每60秒拍摄一次照片,总共拍摄10张照片。现在可以将range()和sleep()函数的值修改为适合你自己的值。如果想捕捉一朵花的开放,那么一分钟或几分钟的图片就足够了。如果想拍下水果腐烂的图片则需要时间久一点。只需运行脚本,然后坐下来等待创建GIF。

关注一下,更多精彩,不容错过!

c语言延时函数delay延时一秒_使用树莓派拍摄延时动画,制作GIF图相关推荐

  1. c语言延时函数delay延时一秒_IMX6UL裸机实现C语言LED实验

    C 语言部分有两个文件 main.c 和 main.h,main.h 里面主要是定义的寄存器地址,在 main.h里面输入代码: #ifndef MAIN_H #define MAIN_H1 /*2 ...

  2. 简述一下延时函数delay怎么用

    void delay(unsigned int t) //括号里面的是参数,可以定义在函数前面,这里为了方便就定义在这里{while(t--): //将t定义为无符号整型,16位,是为了能延时更长时间 ...

  3. LPC1768配置系统延时函数(10纳秒级别和1MS级别)

    最近需要用到一个高精度的延时函数,且时间刻度比较小(纳秒),在查看了寄存器手册和网友的代码以后写了以下两个延时,分别是10纳秒和1毫秒级别的延时函数. 如下: void Delay_10ns(uint ...

  4. 单片机自定义延时函数Delay取值详解

    我们想实现一个定时延时函数,在单片机里并没有什么sleep,需要我们自己实现. 延时函数跟 晶振频率 有很大的关系,因为晶振频率影响程序执行速度. 1.打开Keil 4 - Target Option ...

  5. 11kw星三角启动延时几秒_星三角时间继电器延时时间

    星三角时间继电器延时时间 星三角启动电路中时间继电器只用一个延时闭合的线路图 就是加一个中间继电器. 时间继电器(time relay)是指当加入(或去掉)输入的动作信号后,其输出电路需经过规定的准确 ...

  6. 使用树莓派拍摄延时摄影视频

    使用树莓派摄像头拍摄延时摄影视频 最近用树莓派和自带的摄像头试了试拍摄延时摄影并合成视频,拍摄使用的是raspistill命令自带的间隔拍摄功能,合成主要使用了ffmpeg. 我这里用的是树莓派4B, ...

  7. fun函数是什么php,c语言fun函数有什么例题?_后端开发

    python如何求一组数的最大值?_后端开发 python求一组数最大值的方法:首先定义一组数和变量a,并赋值[a=list(0)]:然后用range循环查询,如果有数大于[list=(0)],则传值 ...

  8. c语言的主函数名是什么,c语言主函数名是什么?_后端开发

    python语言属于汇编语言吗?_后端开发 python语言不是汇编语言.python是高级语言.汇编语言是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言. C语言主 ...

  9. c16语言延时函数delay,《linux设备驱动开发详解》笔记——10中断与时钟

    10.1 中断与定时器 中断一般有如下类型: 内部中断和外部中断:内部中断来自CPU,例如软件中断指令.溢出.除0错误等:外部中断有外部设备触发 可屏蔽中断和不可屏蔽中断 向量中断和非向量中断,ARM ...

  10. 延时函数delay与sleep有什么区别呢?

    在VC中使用带上头文件 #include <windows.h> 注意: 在VC中Sleep中的第一个英文字符为大写的"S" 在标准C中是sleep, 不要大写.. 下 ...

最新文章

  1. iphone8p百度云认证_探秘百度数据工厂Pingo的多存储后端数据联合查询技术
  2. 递归求解并生成哈夫曼编码的代码实现
  3. 滴滴哆啦A梦源码解析
  4. java中sleep()、wait()相同与不同详解
  5. '+' 拼接字符串引起的小事故
  6. This Jenkins instance appears to be offline
  7. 炼丹知识点:模型评估里的陷阱
  8. 委托声明----委托实例化-----委托调用
  9. 【leetcode】910. Smallest Range II
  10. 那些年黑了你的微软BUG
  11. 诗人最近都很忙,忙着去远方了
  12. 思科模拟器配置静态路由
  13. ERP应用优势和劣势有哪些
  14. 频繁默认网关不可用_win7系统默认网关不可用频繁掉线的解决方法
  15. 奈奎斯特定理和香农定理解释
  16. 莱鸟学spss数据分析之第六章---描述性分析
  17. matlab绘制心形图
  18. 一个女孩的工作经历告诉我们
  19. 利用osg::ClipPlane 对节点进行多边形裁切
  20. 【markdown】表格合并单元格

热门文章

  1. 初识大数据 小孩子都懂的大数据
  2. php opendir(),php之opendir()函数的用法
  3. LNMP一键安装脚本使用 离线安装
  4. AI人工智能专业词汇集
  5. Mac 升级到protoc 指定版本
  6. thymeleaf参考手册
  7. java运用itextpdf批量添加书签
  8. c语言编写在线考试系统,c语言作业在线考试系统实现
  9. php 输出中文文件名乱码,PHP fopen中文文件名乱码问题解决方案
  10. 高翔orbslam_ORB SLAM 2 + 构建点云地图 复现