树莓派配置摄像头

注意:树莓派插电时千万不要插拔摄像头!据说十有八九摄像头会GG,我差点就中招了

安装驱动

首先使用ls指令查看是否加载到了对应的video device设备:

ls -al /etc

没有看到设备开始安装驱动

添加驱动设备到文件夹

sudo vim /etc/modules

在文件末尾添加

bcm2835-v412

修改raspberry的启动配置

进入管理中心开启pi camera

sudo raspi-config

config

选择interfacing option

interfacing

开启Camera后重启

检查/dev

ls -al /dev/ | grep video

有video设备则成功

check

使用树莓派摄像头

使用raspistill指令

测试

raspistill -o image.jpg

在使用hdml线连接lcd屏和树莓派时运行,显示屏会显示几秒钟摄像头的实时画面,但使用VNC连接时并不会有实时画面

raspistill相关

  • -v:查看调试信息
  • -w:图像宽度
  • -h:图像高度
  • -rot:图像旋转角度,仅支持0,90,180,270度
  • -o:图像输出地址,若文件名为'-',将输出发送至标准输出设备
  • -t:获取图像前等待时间,默认为5000,即5秒
  • -tl:多久执行一次图像抓取

生成.h246文件

raspistill -o mykeychain.h264 -t 10000 -w 1280 -h 720

h264

错误

在第一次成功调用后,之后再次调用时多次报错:

mmal: No data received from sensor. Check all connections, including the Sunny one on the camera board

网上说导致该问题的原因有:

  • 摄像头sunny部分是否连接牢靠
  • 摄像头是否插紧
  • 最可能:在树莓派带电的时候插拔摄像头,导致管脚烧坏了。这个时候就需要找到是哪个管脚烧坏了,然后补焊一下,加点阻焊剂;

最开始不知道不能热插拔,带点插拔了两三次,不过幸好后面关机重新插了之后就正常了,差点就是血的教训了

VLC实现http视频流传输

在树莓派输入如下命令

sudo raspivid -o - -t 0 -w 640 -h 360 -fps 25|cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8090}' :demux=h264

意思:使用PI官方的raspivid捕获视频工具把视频流输出到vlc,通过vlc转码成h264网络视频流通过http协议以ts的形式封装,然后输出到8090端口,用这个当监控只要网络稳定绝对不卡。

之后使用VLC客户端,网络串流:http://树莓派ip:8090即可,不过延迟较高,可能是因为我用的手机热点的原因,之后再试。

opencv调用树莓派摄像头

配置好opencv后,就能使用opencv自带的videocapture调用摄像头

C++调用

参考这里,成功调用

代码:


void OpenCamera()
{
	//打开摄像头
	VideoCapture capture;
	capture.open(0);
	//灰度图像
	Mat edge;
	//循环显示每一帧
	while (1)
	{
		//frame存储每一帧图像
		Mat frame;
		//读取当前帧
		capture >> frame;
		//显示当前视频
		imshow("正在录制", frame);
		//得到灰度图像
		cvtColor(frame, edge, CV_BGR2GRAY);
		//3*3降噪 (2*3+1)
		blur(edge, edge,Size(7,7));
		//边缘显示
		Canny(edge,edge,0,30,3);
		imshow("高斯模糊视频",edge);
	}
}

使用VNC连接时延迟较高,在使用HDMI显示屏时效果较好,延迟较低

VNC连接:

video-cpp-vnc

HDMI连接:

video-cpp-hdmi

Python调用

参考官网指南

*本文参考:使用树莓派CSI摄像头时报错;树莓派3 B+ 的摄像头简单使用

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus