树莓派摄像头
安装
默认禁用摄像头。要在rasp-config 中 interface config 打开摄像头支持。
sudo raspi-config
依次选择:「Interfacing Options」 > 「Camera」
拍照
raspistill拍照
测试摄像头:
raspistill -t 2000 -o test.jpg
-
-t
:延时,单位为毫秒 -
-o
:保存文件
https://www.cnblogs.com/uestc-mm/p/7587783.html
这里讲一下raspistill命令的相关参数和实验的具体效果:
-
-t
:获取图像前等待时间,单位为毫秒。默认为5000,即5秒 -
-tl
:多久执行一次图像抓取 -
-o
:图像输出地址,例如image.jpg
,如果文件名为-
,将输出发送至标准输出设备 -
-q
:quality质量的意思越大文件占用存储空间越大,自己根据满意的画面质量设置吧,挨个试。 数值8
是我尝试出来的画面质量还可以而且占用空间仅有大约52k; -
-w
:图像宽度 -
-h
:图像高度 -
-rot
:图像旋转角度,只支持 0、90、180、270 度(这里说明一下,测试发现其他角度的输入都会被转换到这四个角度之上) -
-v
:调试信息查看
例如,执行下面的指令:
raspistill -o image%d.jpg -rot 180 -w 1024 -h 768 -t 20000 -tl 5000 -v
注:这里解释一下图片的采集数量\(N\)、拍摄时间\(t\)和拍摄间隔\(tl\)的相关关系:
\[ n = \frac{t}{tl} + 1 \]所以有\(\frac{20000}{5000} +1 = 5\)张图片
接着下面就会输出一系列的捕获的信息,如图片的大小,图片的总捕获时间,图像是否旋转,是否水平反转垂直反转
在光线较弱的情况下画面会偏黄,我们通过命令修改代码可以自动调节(毕竟就只有30来块钱)
raspistill -o my_photo.jpg -rot 180 -w 1024 -h 768 -t 2000 -q 8 \ -br 62 -awd auto -ex auto
参数说明
图像参数与命令:
-? | --help | 帮助文档 |
-w | --width | 设置图像宽度 <尺寸> |
-h | --height | 设置图像高度 <尺寸> |
-q | --quality | 设置jpeg品质 <0到100> |
-r | --raw | 增加raw原始拜尔数据到JPEG元数据 |
-o | --output |
输出文件名 <文件名>,如果要写到stdout,使用-o - ,如果不特别指定,图像文件不会被保存
|
-l | --latest | 链接最近的完整图像到指定文件 <文件名> |
-v | --verbose | 在运行摄像头时输出详细信息 |
-t | --timeout | 拍照和关闭时的延时指定,未指定时默认是5s |
-d | --demo | 运行一个demo模式(cycle through range of camera options, no capture),括号里的我可以理解成循环测试模式吗? |
-e | --encoding | 编码来输出指定格式文件 (jpg, bmp, gif, png) |
-x | --exif |
将可交换图像文件应用到捕获中(格式:key=value )或者不设置
|
-k | --keypress |
按键触发,按ENTER 键拍照,按X 然后ENTER 键退出
|
-s | -signal | 信号触发,等待另一个进程信号来拍摄一张照片 |
-g | -gl | 绘制预览到文本,而不是使用视频渲染组件(啥意思?) |
-gc | --glcapture | 捕获GL帧buffer而不是摄像机图像 |
-tl | --timelapse | 间隔拍摄,每<ms>拍摄一张图片 |
-th | --thumb | 设置预览图(小图)参数(包括X、Y、品质)或者不设置 |
-fp | --fullpreview | 用静态捕捉分辨率运行预览(可能会减小预览帧率) |
-cs | --camselect | 选择摄像头设备 <数字>,默认0 |
-bm | --burst | 运行burst capture mode |
-set | --settings | 检索摄像机设置值然后写出到stdout |
-sh | --sharpness | 设置图像锐度 (-100 到 100) |
-co | --contrast | 设置图像对比度 (-100 到 100) |
-br | --brightness | 设置图像亮度 (0 到 100) |
-sa | --saturation | 设置图像饱和度 (-100 到 100) |
-vs | --vstab | Turn on video stabilisation 开启摄像头防抖模式(是这个意思吗?) |
-ev | --ev | 设置EV补偿 |
-ex | --exposure | 设置曝光模式(参见提示) |
-mm | --metering | 设置测光模式(参见提示) |
-hf | --hflip | 设置水平翻转 horizontal flip |
-vf | --vflip | 设置垂直翻转 vertical flip |
-roi | --roi | 设置interest区域 (啥叫interset?) |
--ss | --shutter | 设置快门速度,微秒 |
-rot | --rotation | 设置图像旋转 (0到359) |
-ISO | --ISO | 设置摄像头感光度 |
-awb | --awb | 设置AWB模式(参见提示) |
-ifx | --imxfx | 设置图像效应(参见提示) |
-cfx | --colfx | 设置色彩效应(参见提示) |
--drc | --drc | 设置DRC水平 |
--awbg | --awbgains | 设置AWB阈值, AWB模式必须关闭 |
测光模式选项:
average | 全画面平衡测光 |
spot | 点测光 |
backlit | 模拟背光图像 |
matrix | 阵列测光 |
曝光模式选项:
auto | 自动曝光模式 |
night | 夜间拍摄模式 |
nightpreview | 夜间预览拍摄模式 |
backlight | 逆光拍摄模式 |
spotlight | 聚光灯拍摄模式 |
sports | 运动拍摄模式 |
snow | 雪景拍摄模式 |
beach | 海滩拍摄模式 |
verylong | 长时间曝光拍摄模式 |
fixedfps | 帧约束拍摄模式 |
antishake | 防抖模式 |
fireworks | 烟火拍摄模式 |
自动白平衡(AWB)选项:
off | 关闭白平衡测算 |
auto | 自动模式(默认) |
sun | 日光模式 |
cloud | 多云模式 |
shade | 阴影模式 |
tungsten | 钨灯模式 |
fluorescent | 荧光灯模式 |
incandescent | 白炽灯模式 |
flash | 闪光模式 |
horizon | 地平线模式 |
图像特效选项:
none | 无特效(默认) |
negative | 反色图像 |
solarise | 曝光过度图像 |
posterize | 色调图像 |
whiteboard | 白板特效 |
blackboard | 黑板特效 |
sketch | 素描风格特效 |
denoise | 降噪图像 |
emboss | 浮雕图像 |
oilpaint | 油画风格特效 |
hatch | 草图特效 |
gpen | 马克笔特效 |
pastel | 柔化风格特效 |
watercolour | 水彩风格特效 |
film | 胶片颗粒风格特效 |
blur | 模糊图像 |
saturation | 色彩饱和图像 |
colourswap | 暂未可用 |
washedout | 暂未可用 |
posterise | 暂未可用 |
colourpoint | 暂未可用 |
colourbalance | 暂未可用 |
cartoon | 暂未可用 |
预览参数与命令
-p | --preview | 预览窗口大小设置 <x,y,w,h> |
-f | --fullscreen | 全屏幕预览模式 |
-op | --opacity | 预览窗口透明度 (0-255) |
-n | --nopreview | 不显示预览窗口 |
-gs | -glscene | GL屏幕尺寸等参数 |
-gw | -glwin | GL窗口参数 |
例子
# 仅显示两秒钟预览图像,而不对图像进行保存。 raspistill -t 2000 # 两秒钟(时间单位为毫秒)延迟后获取一张照片并发送至标准输出设备 raspistill -t 2000 -o - # 两秒钟(时间单位为毫秒)延迟后获取一张照片并发送至标准输出设备 # 然后重定向标准输出到文件`my_file.jpg` raspistill -t 2000 -o - > my_file.jpg # 两秒钟(时间单位为毫秒)延迟后拍摄一张照片,并保存为 image.jpg raspistill -t 2000 -o image.jpg # 将图像保存为 PNG 文件(无损压缩格式,但是要比 JPEG 速度慢)。 # 注意,当选择图像编码时,文件扩展名将被忽略。 raspistill -t 2000 -o image.png –e png # 降低图像质量,减小文件尺寸 raspistill -t 2000 -o image.jpg -q 5 # 拍摄一张自定义大小的照片。 raspistill -t 2000 -o image.jpg -w 640 -h 480 # 间隔获取图片, # 在 10 分钟(10 分钟 = 600000 毫秒)的时间里,每 10 秒获取一张, # 并且命名为`image_number_1_today.jpg`,`image_number_2_today.jpg` ... 的形式。 raspistill -t 600000 -tl 10000 -o image_num_%d_today.jpg # 强制使预览窗口出现在坐标为 100,100 的位置, # 并且尺寸为宽 300 和高 200 像素。 raspistill -t 2000 -o image.jpg -p 100,100,300,200 # 禁用预览窗口 raspistill -t 2000 -o image.jpg -n # 向 JPEG 文件中添加一些 EXIF 信息。 # 该命令将会把作者名称标签设置为`Dreamcolor`,GPS 海拔高度为`123.5`米。 raspistill -t 2000 -o image.jpg \ -x IFD0.Artist=Dreamcolor -x GPS.GPSAltitude=1235/10 # 设置浮雕风格图像特效 raspistill -t 2000 -o image.jpg -ifx emboss # 设置 YUV 图像的 U 和 V 通道为指定的值(128:128 为黑白图像) raspistill -t 2000 -o image.jpg -cfx 128:128
摄像
raspivid指令来生成.h246的文件
raspivid -o mykeychain.h264 -t 10000 -w 1280 -h 720
-
-o
:保存文件名 -
-t
:时间长度,单位为毫秒。为0表示一直拍下去。 -
-w
:分辨率宽度,单位为像素。 -
-h
:分辨率高度,单位为像素。 -
-fps
;帧数。
这样就会在当前文件夹下面生成mykeychain.h264
的文件:
如果你想转换视频格式,可以使用gpac
包中所带有的MP4Box
应用;
sudo apt-get install -y gpac
然后将这段 flv 格式的视频流转换为每秒30帧的.mp4
格式视频:
MP4Box -fps 30 -add my_video.flv video_achieve.mp4
使用VLC等来实现http的视屏流传输:
首先需要在你的树莓派上面安装VLC的软件
sudo apt-get update sudo apt-get install vlc --fix-missing sudo apt-get install vlc
启动你的树莓派摄像头
sudo raspivid -o - -rot 180 -t 0 -fps 15 | cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8080}' :demux=h264
打开你PC机电脑上的VLC软件,选择打开网络串流(Ctrl+N),输入上面指令的端口号以及对应的树莓派的IP地址
(如下图所示我的树莓派的IP地址是192.168.1.129),运行结果如下图所示,当然也发现http的视频流的确比较卡, 当然我采用的视频的画质是500W像素的画质,所以视频的质量比较差,当我将视频的画质调节到720*360时, 感觉非常的流畅。(@局域网测试环境)
另一种方式是用rtsp协议:
#!/bin/bash raspivid -w 853 -h 480 -fps 10 -rot 180 -t 0 -n -o - | \ cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' \ :demux=h264
用ffmpeg推送rmtp直播流
raspivid -fps 10 -w 853 -h 480 -b 700000 -t 0 -a 12 -a 1024 \ -a "CAM-1 %Y-%m-%d %X" -ae 18,0xff,0x808000 -o - | ffmpeg -re -i - \ -s 640x480 -vcodec copy -acodec copy -b:v 800k -b:a 32k -f flv \ rtmp://118.178.197.156/hls/video01