“模板:Raspberry Pi Camera User Manual”的版本间的差异
Yousimaier17(讨论 | 贡献) |
Yousimaier17(讨论 | 贡献) |
||
第46行: | 第46行: | ||
如果要关掉预览窗口,可以用ctrl-c终止程序。 | 如果要关掉预览窗口,可以用ctrl-c终止程序。 | ||
− | === 拍照 === | + | === Bullseyes系统 === |
+ | ==== libcamera-hello ==== | ||
+ | *这个是一个简单的“hello word" 程序,用来预览摄像头并将摄像头画面显示在屏幕上。 | ||
+ | *终端执行以下语句即可实时预览摄像头: | ||
+ | <pre> | ||
+ | libcamera-hello -t 0 | ||
+ | </pre> | ||
+ | :其中 -t 0 表示一直预览至终止程序,用户可根据自己的需要进行调整。 | ||
+ | |||
+ | ==== libcamera-jpeg ==== | ||
+ | *这是一个简单的静态图片拍摄程序,不同于libcamera-still的复杂功能,libcamera-jpeg代码更简洁,并且有很多相同的功能来完成图片拍摄。 | ||
+ | *终端执行以下语句会显示一个5秒左右的预览串口,然后拍摄一张全像素的JPEG图像: | ||
+ | <pre> | ||
+ | libcamera-jpeg -o test.jpg | ||
+ | </pre> | ||
+ | :其中test.jpg表示文件名 | ||
+ | *用户可以通过-t 参数来设置预览时间,同时可以通过--width 和 --height来设置拍摄图像的分辨率。例如 | ||
+ | <pre> | ||
+ | libcamera-jpeg -o test.jpg -t 2000 --width 640 --height 480 | ||
+ | </pre> | ||
+ | *所有的libcamera指令都允许用户自己设置快门时间和增益,比如: | ||
+ | <pre> | ||
+ | libcamera-jpeg -o test.jpg -t 2000 --shutter 20000 --gain 1.5 | ||
+ | </pre> | ||
+ | :其中 --shutter 20000 表示曝光 20ms, --gain 1.5 表示摄像头增益被设置为1.5倍。 | ||
+ | |||
+ | ==== libcamera-still ==== | ||
+ | *libcamera-still和libcamera-jpeg非常相似,不同的是libcamera继承了更多raspistill的功能。 | ||
+ | *终端执行以下语句即可拍照: | ||
+ | <pre> | ||
+ | libcamera-still -o test.jpg | ||
+ | </pre> | ||
+ | :其中test.jpg表示文件名 | ||
+ | *libcamea-still支持不同格式的图像文件,可以支持png和bmp编码,也支持直接不带编码或者任何图像格式地将RGB或者YUV像素的二进制转储保存成文件。如果是直接保存RGB或者YUV数据,程序在读取此类文件的时候必须了解文件的像素排列方式。 | ||
+ | <pre> | ||
+ | libcamera-still -e png -o test.png | ||
+ | libcamera-still -e bmp -o test.bmp | ||
+ | libcamera-still -e rgb -o test.data | ||
+ | libcamera-still -e yuv420 -o test.data | ||
+ | </pre> | ||
+ | :图像保存的格式是通过-e参数控制的, 如果没有调用-e参数设置的话,默认按照输出的文件名的格式保存。 | ||
+ | |||
+ | ==== libcamera-vid ==== | ||
+ | *libcamera-vid是一个视频录制程序, 默认使用的是树莓派的硬件H.264编码器。这个程序运行之后会在屏幕上显示一个预览窗口,同时将比特流编码输出到指定文件。 | ||
+ | *终端执行以下语句即可录制视频: | ||
+ | <pre> | ||
+ | libcamera-vid -t 10000 -o test.h264 | ||
+ | </pre> | ||
+ | :其中-t 10000 表示录制10秒的视频,test.h264表示文件名 | ||
+ | 如果要查看视频可以用vlc来进行播放 | ||
+ | <pre> | ||
+ | vlc test.h264 | ||
+ | </pre> | ||
+ | |||
+ | ==== libcamera-raw ==== | ||
+ | *libcamera-raw类似于视频录制程序,不同的地方时,libcamera-raw录制的是直接传感器输出的Bayer格式的数据,也就是原始图像数据。libcamera-raw不会显示预览窗口。 | ||
+ | *终端执行以下语句即可录制一个2秒的原始数据片段: | ||
+ | <pre> | ||
+ | libcamera-raw -t 2000 -o test.raw | ||
+ | </pre> | ||
+ | 程序会在没有格式信息的情况下直接转储原始帧,程序会将像素格式和图像尺寸直接打印在终端,用户可以根据输出的数据查看像素数据. | ||
+ | 默认情况下,程序会将原始帧保存成一个文件,文件通常比较大,用户可以通过--segement参数将文件进行分割。 | ||
+ | <pre> | ||
+ | libcamera-raw -t 2000 --segment 1 -o test%05d.raw | ||
+ | </pre> | ||
+ | |||
+ | === Buster系统 === | ||
+ | ==== 拍照 ==== | ||
终端执行以下语句即可拍照: | 终端执行以下语句即可拍照: | ||
<pre> | <pre> | ||
第53行: | 第120行: | ||
此处 image.jpg 是照片文件名。 | 此处 image.jpg 是照片文件名。 | ||
− | === 摄像 === | + | ==== 摄像 ==== |
终端执行以下语句即可摄像: | 终端执行以下语句即可摄像: | ||
<pre> | <pre> |
2022年5月7日 (六) 11:12的版本
使用说明
硬件连接
把摄像头的排线插入到网口和 HDMI 口之间的排线插槽,银色亮面朝向 HDMI 口。需要先把树莓 派板载的排线插槽的扣子拨开,才能插入排线。排线需要紧密插入排线插槽,同时应注意避免排 线折弯。排线插入之后,需要把插槽的扣子重新扣上。
启用摄像头
如果使用的是最新的bullseye镜像,摄像头接口已经默认开启,可以跳过该步骤。
1. 进入 Raspbian 系统终端,执行以下语句获取系统更新:
apt-get update apt-get upgrade
2. 使用 raspi-config 配置摄像头。执行:
sudo raspi-config
依次选择:
Interfacing Options --> Camera --> Would you like the camera interface to be enabled? 选择 <Yes>
3. 重启系统:提示 Would you like to reboot now? 选择 Yes
或者执行这个命令重启:
sudo reboot
配置并且连接完摄像头,只要给树莓派上电即可使用拍照和摄像功能。
测试摄像头(Bullseyes系统)
打开树莓派终端,并开启摄像头预览:
sudo libcamera-hello -t 0
如果要关掉预览窗口,可以直接组合按键Alt-F4,或者点击x关掉。 也可以回到终端界面,用ctrl-c终止程序。
测试摄像头(Buster系统)
打开树莓派终端,并开启摄像头预览:
sudo raspistill -t 0
如果要关掉预览窗口,可以用ctrl-c终止程序。
Bullseyes系统
libcamera-hello
- 这个是一个简单的“hello word" 程序,用来预览摄像头并将摄像头画面显示在屏幕上。
- 终端执行以下语句即可实时预览摄像头:
libcamera-hello -t 0
- 其中 -t 0 表示一直预览至终止程序,用户可根据自己的需要进行调整。
libcamera-jpeg
- 这是一个简单的静态图片拍摄程序,不同于libcamera-still的复杂功能,libcamera-jpeg代码更简洁,并且有很多相同的功能来完成图片拍摄。
- 终端执行以下语句会显示一个5秒左右的预览串口,然后拍摄一张全像素的JPEG图像:
libcamera-jpeg -o test.jpg
- 其中test.jpg表示文件名
- 用户可以通过-t 参数来设置预览时间,同时可以通过--width 和 --height来设置拍摄图像的分辨率。例如
libcamera-jpeg -o test.jpg -t 2000 --width 640 --height 480
- 所有的libcamera指令都允许用户自己设置快门时间和增益,比如:
libcamera-jpeg -o test.jpg -t 2000 --shutter 20000 --gain 1.5
- 其中 --shutter 20000 表示曝光 20ms, --gain 1.5 表示摄像头增益被设置为1.5倍。
libcamera-still
- libcamera-still和libcamera-jpeg非常相似,不同的是libcamera继承了更多raspistill的功能。
- 终端执行以下语句即可拍照:
libcamera-still -o test.jpg
- 其中test.jpg表示文件名
- libcamea-still支持不同格式的图像文件,可以支持png和bmp编码,也支持直接不带编码或者任何图像格式地将RGB或者YUV像素的二进制转储保存成文件。如果是直接保存RGB或者YUV数据,程序在读取此类文件的时候必须了解文件的像素排列方式。
libcamera-still -e png -o test.png libcamera-still -e bmp -o test.bmp libcamera-still -e rgb -o test.data libcamera-still -e yuv420 -o test.data
- 图像保存的格式是通过-e参数控制的, 如果没有调用-e参数设置的话,默认按照输出的文件名的格式保存。
libcamera-vid
- libcamera-vid是一个视频录制程序, 默认使用的是树莓派的硬件H.264编码器。这个程序运行之后会在屏幕上显示一个预览窗口,同时将比特流编码输出到指定文件。
- 终端执行以下语句即可录制视频:
libcamera-vid -t 10000 -o test.h264
- 其中-t 10000 表示录制10秒的视频,test.h264表示文件名
如果要查看视频可以用vlc来进行播放
vlc test.h264
libcamera-raw
- libcamera-raw类似于视频录制程序,不同的地方时,libcamera-raw录制的是直接传感器输出的Bayer格式的数据,也就是原始图像数据。libcamera-raw不会显示预览窗口。
- 终端执行以下语句即可录制一个2秒的原始数据片段:
libcamera-raw -t 2000 -o test.raw
程序会在没有格式信息的情况下直接转储原始帧,程序会将像素格式和图像尺寸直接打印在终端,用户可以根据输出的数据查看像素数据. 默认情况下,程序会将原始帧保存成一个文件,文件通常比较大,用户可以通过--segement参数将文件进行分割。
libcamera-raw -t 2000 --segment 1 -o test%05d.raw
Buster系统
拍照
终端执行以下语句即可拍照:
raspistill -o image.jpg
此处 image.jpg 是照片文件名。
摄像
终端执行以下语句即可摄像:
raspivid -o video.h264 -t 10000
其中 -t 10000 表示录制 10 秒,用户各根据自己的需要进行调整。
参考资料
Python 代码控制摄像头
- 可借助picamera库,使python支持摄像头的控制
- 树莓派镜像在Bullseye版本之后,底层的树莓派驱动由Raspicam切换成libcamera。libcamera是一个开源的软件栈(后面会称呼做驱动,方便理解),方便于第三方移植和开发自己的摄像头驱动。当前的libcamera不支持python, 因此树莓派官方还是提供了Raspicam的安装下载的方法。对于切换成libcamera困难,但是又需要用最新系统的用户,请直接移步到Raspicam的使用说明。
预览
- 打开python IDE,如Thonny Python IDE,或打开记事本
- 新建名字为camera.py的python文件,并保存到桌面
- 输入以下代码
from picamera import PiCamera
from time import sleep
camera = PiCamera()
camera.start_preview()
sleep(5)
camera.stop_preview()
- 进入终端,执行
python3 Desktop/camera.py
桌面将弹出预览框,实时取景并预览
需要注意的是,预览框仅在直接连接屏幕时有效,而是使用VNC等软件远程连接树莓派桌面,则不会弹出该预览框
如果预览画面是上下颠倒的,则可以通过以下代码旋转180度
camera = PiCamera()
camera.rotation = 180
- 预览画面可旋转90度、180度、270度
- 如果要重置画面,可将画面旋转0度
设置预览框的透明度
camera.start_preview(alpha=100)
alpha的值范围是0-255
拍照
- 在预览代码的中间插入camera.capture()命令
camera.start_preview()
sleep(5)
camera.capture('/home/pi/Desktop/image.jpg')
camera.stop_preview()
请注意:必须要执行代码sleep(5),以便给摄像头的传感器留下一定时间调整亮度和白平衡
录像
移除 camera.captue(),并加入camera.start_recording()和camera.stop_recording()
camera.start_preview()
camera.start_recording('/home/pi/Desktop/video.h264')
sleep(5)
camera.stop_recording()
camera.stop_preview()
以上代码执行后,将在桌面生成video.h264的视频,长度为5秒
更多参数
- picamera可以给图片添加很多参数
设置分辨率
- 默认情况下,图片的分辨率等于显示器的分辨率,但最大的图像尺寸不超过2592*1944像素,视频尺寸不超过1920*1080像素;图像和视频的最小尺寸则为64*64像素
- 可使用以下代码设置图像的分辨率
camera.resolution = (2592, 1944)
camera.framerate = 15
camera.start_preview()
sleep(5)
camera.capture('/home/pi/Desktop/max.jpg')
camera.stop_preview()
- 请注意,相机的帧数需设置为≤15帧,以支持最大分辨率
给图片加文字
添加文字
camera.start_preview()
camera.annotate_text = "Hello world!"
sleep(5)
camera.capture('/home/pi/Desktop/text.jpg')
camera.stop_preview()
文字大小
camera.annotate_text_size = 50
annotate_text_size的取值范围为6-160,默认值32
文字颜色
camera.start_preview()
camera.annotate_background = Color('blue')
camera.annotate_foreground = Color('yellow')
camera.annotate_text = " Hello world "
sleep(5)
camera.stop_preview()
修改图片的参数
- 亮度
camera.start_preview()
camera.brightness = 70
sleep(5)
camera.capture('/home/pi/Desktop/bright.jpg')
camera.stop_preview()
brightness的取值范围为0-100,默认值50
- 对比度
camera.contrast = 50
contrast的取值范围为0-100,默认值50
- 风格
可通过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
例如
camera.start_preview()
camera.image_effect = 'colorswap'
sleep(5)
camera.capture('/home/pi/Desktop/colorswap.jpg')
camera.stop_preview()
- 模式
可使用camera.exposure_mode,设置拍照模式(如夜晚、运动、雪地等模式)
有效值:
- off
- auto(默认)
- night
- nightpreview
- backlight
- spotlight
- sports
- snow
- beach
- verylong
- fixedfps
- antishake
- fireworks
例如
camera.start_preview()
camera.exposure_mode = 'beach'
sleep(5)
camera.capture('/home/pi/Desktop/beach.jpg')
camera.stop_preview()
- 白平衡
可使用camera.awb_mode设置白平衡
有效值:
- off
- auto(默认)
- sunlight
- cloudy
- shade
- tungsten
- fluorescent
- incandescent
- flash
- horizon
例如设置白平衡为“白天”
camera.start_preview()
camera.awb_mode = 'sunlight'
sleep(5)
camera.capture('/home/pi/Desktop/sunlight.jpg')
camera.stop_preview()