博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用树莓派拍摄延时动画,制作GIF图
阅读量:6458 次
发布时间:2019-06-23

本文共 2246 字,大约阅读时间需要 7 分钟。

本期教大家将编写一个小脚本用树莓派来捕获多个图像,然后可以将这些图像组合成动画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的图片了。

 

拍摄多张图片

 

可以使用相机模块拍摄多个图像,方法是使用循环捕获图像。修改您的代码文件以包含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 PiCamerafrom 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 PiCamerafrom 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 PiCamerafrom os import systemfrom 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。

 

 

关注一下,

???

 

转载于:https://www.cnblogs.com/wirehome/p/10456375.html

你可能感兴趣的文章
2016-2017 ACM Central Region of Russia Quarterfinal Programming Contest
查看>>
gluoncv 目标检测,训练自己的数据集
查看>>
C++ 类型转换归纳
查看>>
ButterKnife8.5.1最新版本使用详细步骤
查看>>
团队项目第一阶段站立会议01
查看>>
68.TextView设置中划线、下划线
查看>>
[bzoj 4066]简单题
查看>>
14.段落排版--行间距(行高)
查看>>
【转】并查集
查看>>
sqlzoo:6
查看>>
(十)Hibernate的一对一关联关系
查看>>
LeetCode OJ:Linked List Cycle(链表循环)
查看>>
【Alpha】Scrum Meeting 10
查看>>
【项目管理】项目管理发展的新阶段——PRINCE2项目管理方法
查看>>
java集合之Stack栈基础
查看>>
CSS圆角兼容IE6
查看>>
数据结构线性表
查看>>
The Hundred Greatest Theorems
查看>>
CF-Approximating a Constant Range
查看>>
使用 Google Guava 美化你的 Java 代码
查看>>