使用树莓派拍摄延时动画,制作GIF图

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

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

sudo apt-get update
sudo apt-get install imagemagick -y

 

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

 

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

#/home/pi/timelapse.py

from picamera import PiCamera


camera = PiCamera()
camera.capture('/home/pi/Desktop/image.jpg')

 

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

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

 

拍摄多张图片

 

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

from picamera import PiCamera

camera = PiCamera()

for i in range(10):
    camera.capture('image.jpg')

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

from picamera import PiCamera

camera = 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 system

camera = 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 system

camera = 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 sleep

camera = 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。

 

 

关注一下,

👇👇👇

 

posted @ 2019-03-01 14:52  WireHome  阅读(731)  评论(0编辑  收藏  举报