在此项目中,将了解如何使用树莓派摄像头模块进行拍照,录制视频等实验。
文章目录
- 一、所需硬件
- 二、连接CSI摄像头
- 三、命令行控制CSI摄像头
- 1、raspistill命令
- 基本用法
- Bash脚本
- 2、raspivid命令
- 基本用法
- MP4 视频格式
- 四、使用Python代码拍摄静态图片
- 五、使用Python代码录制视频
- 六、更改图像设置和添加图像效果
- 设置分辨率
- 向图像添加文字
- 添加酷炫的图像效果
一、所需硬件
1、 树莓派4b
2、CSI摄像头
二、连接CSI摄像头
1、将SCI摄像头插进树莓派端口
注意:此时一定保证树莓派为关机状态,以免树莓派烧坏;安装时,摄像头背向树莓派USB接口方向。
如下图所示:
2、开机设置树莓派
终端输入:
pi@raspberrypi:~ $ sudo raspi-config
选中5 Interfacing Options ,敲击Enter进入:
选中P1 Camera ,敲击Enter进入:
选中 是 ,敲击Enter进入:
2、重启树莓派
终端输入:
pi@raspberrypi:~ $ sudo reboot
三、命令行控制CSI摄像头
现在摄像头模块已连接并且软件已启用,开始尝试使用命令行工具raspistill和raspivid。
1、raspistill命令
raspistill的作用是相机模块捕获静态照片的命令行工具
基本用法
打开终端:
raspistill -o Desktop/image.jpg
执行完成后:
我们应用摄像头,出于某些特殊原因,相机必须倒置放置时,必须将图像旋转180°才能正确显示。解决此问题的方法是通过传递-vf和-hf标志同时垂直和水平翻转图像。
打开终端:
raspistill -vf -hf -o Desktop/image1.jpg
因为我的摄像头是正置的,所以使用-vf,-hf后,拍摄的图像为倒置的。
分辨率:
摄像头模块以2592 x 1944的分辨率进行拍照。
图片大小:
用相机模块拍摄的照片约为2.4MB,每1GB大约存放425张照片。
通过添加不同的选项,可以设置raspistill命令拍摄的图像的大小和外观,例如,添加-h和-w更改图像的高度和宽度:
raspistill -o Desktop/image-small.jpg -w 640 -h 480
观察图片分辨率的显示:
Bash脚本
我们可以创建一个Bash脚本,用于相机拍摄照片。
创建用于存放照片的文件夹:
mkdir -p /home/pi/camera
创建camera.sh空文件:
touch camera.sh
要创建脚本,打开编辑器并编写以下示例代码:
#!/bin/bash
DATE=$(date +"%Y-%m-%d_%H%M")
raspistill -vf -hf -o /home/pi/camera/$DATE.jpg
将文件设为可执行文件:
chmod +x camera.sh
运行脚本:
./camera.sh
观察/home/pi/camera文件夹,存在我们运行脚本所拍摄的图片。
2、raspivid命令
raspivid是用于使用相机模块捕获视频的命令行工具。
基本用法
打开终端:
raspivid -o Desktop/video.h264
将录制5秒(默认时间长度)的视频文件,如图所示:
指定视频时间长度:
要指定所拍摄视频的时间长度,以毫秒为单位传入 -t
raspivid -o Desktop/video1.h264 -t 10000
这次将拍摄10秒的视频。
MP4 视频格式
树莓派系统默认视频格式为 h264 格式,许多视频播放器在播放h264 格式的视频会出现错误,甚至不能播放。所以需要将格式转化为.mp4格式。
打开终端,安装MP4Box:
sudo apt install -y gpac
使用raspivid捕获原始视频,并将其包装在MP4容器中,如下所示:
1、640x480、150比特率、捕获30秒的原始视频到pivideo.h264:
raspivid -t 30000 -w 640 -h 480 -fps 25 -b 1200000 -p 0,0,640,480 -o Desktop/pivideo.h264
2、用MP4容器包装原始视频:
MP4Box -add Desktop/pivideo.h264 Desktop/pivideo.mp4
3、删除原始视频文件
rm Desktop/pivideo.h264
四、使用Python代码拍摄静态图片
打开Python3编辑器,Thonny Python IDE:
保存文件,命名为camera.py。
输入以下代码:
from picamera import PiCamera
from time import sleep
camera = PiCamera()
# camera.rotation = 180 加入此条语句,图像旋转180度
# 预览3秒
camera.start_preview()
sleep(3)
# 3秒后拍摄照片,存放于桌面
camera = capture('/home/pi/Desktop/image1.jpg')
# 结束预览
camera.stop_preview()
注意:
1、仅当树莓派连接显示器时,摄像机预览才起作用。我使用的VNC远程桌面,则不会看到摄像机预览。
2、即使我们看不到摄像头的预览图像,也要设置预览,短暂的预览帮助摄像头调节分辨率。
3、务必在拍摄图像前至少sleep两秒钟,因为这样可以使相机的传感器有时间感测光照强度。
使用循环,每3秒拍照一次,共5张图像:
from picamera import PiCamera
from time import sleep
camera = PiCamera()
# 预览3秒
camera.start_preview()
for i in range(5):
sleep(3)
camera.capture('/home/pi/Desktop/img{}.jpg'.format(i))
camera.stop_preview()
五、使用Python代码录制视频
现在开始录制视频:
修改上述拍照代码,删除capture(),添加start_recording()和stop_recording()。
代码如下:
from picamera import PiCamera
from time import sleep
camera = PiCamera()
camera.start_preview()
camera.start_recording('/home/pi/Desktop/video.h264')
sleep(3)
camera.stop_recording()
camera.stop_preview()
接下来只需要按照上文方法,把视频修改成.mp4格式就可以了。
六、更改图像设置和添加图像效果
Python下picamera模块提供了许多效果和配置,可以更改图像的外观。
注意:某些设置仅影响预览而不影响拍摄的图像,某些设置仅影响拍摄的图像而不影响预览,其他的设置则同时影响两者。
设置分辨率
我们可以更改相机模块拍摄图像的分辨率。
默认情况下,图像分辨率为显示器的分辨率,照片的最大分辨率为2592×1944,最小分辨率为64×64。视频录制的最大分辨率为1920×1080。
使用最大分辨率拍摄一张照片:
from picamera import PiCamera
from time import sleep
camera = PiCamera()
camera.resolution = (2592, 1944)
camera.framerate = 15
camera.start_preview()
sleep(5)
camera.capture('/home/pi/Desktop/max.jpg')
camera.stop_preview()
注意:需要将帧频设置为15才能启用最大分辨率拍摄图像。
向图像添加文字
向图像添加文字操作如下:
- 使用annotate_text将文本添加到图像中
- 使用annotate_text_size设置文本大小(默认32,设置范围6-160)
- 添加Color类,用来更改文字颜色
代码如下;
from picamera import PiCamera
from time import sleep
camera = PiCamera()
camera.start_preview()
camera.annotate_background = Color('white')
camera.annotate_foreground = Color('blue')
camera.annotate_text = "Hello world!"
camera.annotate_text_size = 60
sleep(2)
camera.capture('/home/pi/Desktop/text5.jpg')
camera.stop_preview()
添加文本的图片如下:
添加酷炫的图像效果
可以使用camera.image_effect来应用特定的图像效果。
图像效果选项包括:
- none
- negative
- solarize
- sketch
- denoise
- emboss
- oilpaint
- hatch
- gpen
- pastel
- watercolor
- film
- blur
- saturation
- colorswap
- washedout
- posterise
- colorpoint
- colorbalance
- cartoon
- deinterlace1
- deinterlace2
默认效果为none。
随意选择一个图像效果,看一下效果:
from picamera import PiCamera
from time import sleep
camera = PiCamera()
camera.start_preview()
camera.image_effect = 'colorswap'
sleep(2)
camera.capture('/home/pi/Desktop/colorswap.jpg')
camera.stop_preview()
效果如下:
我相信学到了这里,你一定对树莓派相机的使用有了初步的认识,接下来,就需要你实际动手试一试了,快来行动吧💪💪💪