入驻Rasberry 3B+,希望用它运行OpenCV玩玩识别和图像处理,记录坎坷之路。
1.安装前的更新
sudo apt-get update **软件源更新
sudo apt-get upgrade ** 升级本地所有安装包
sudo rpi-update ** 升级树莓派固件
2.安装前的准备
(1)留足存储空间,opencv蛮大的
更新完后,看第一行已用空间37%,算一下我用的是16G的SD卡,看来不用担心。也有人说空间不够可能是因为整个存储空间没有充分使用,那就拓展一下文件系统:
sudo raspi-config **进入pi的软件配置工具界面
选 Advanced Option 高级选项
选 Expand Filesystem 就OK啦。
(2)镜像源问题
之前在装GCC的“Build-essential 软件包”时出现无法定位软件包的错误,所以更换了Raspbian的更新源,换成国内的源,选离你近一点的(远近似乎关系不大)。
虽然麻烦,但是挺必要的,而我的一个小伙伴就惨了,不知道为什么没有换源怎么都装不上。
(因为换源的时候出了好多错误,比如注释掉原有的地址后手输新地址时因为一个空格和一些规范弄得头皮发麻,而且网上的贴出的一些网址可能已经变动了可以直接百度搜索某某镜像源网址) So这波操作还是不班门弄斧贴上来了,请仔细参考大神们的教程。
3.开始安装
(1)sudo apt-get install build-essential cmake git pkg-config **用来安装build-essential、cmake、git和pkg-config,这些都是Opencv所需的相关构件
(2)安装图像工具包
sudo apt-get install libjpeg8-dev **安装jpeg格式的图像工具包
输入: Y ,安装完成,同上步骤再一一进行下一个:
sudo apt-get install libtiff5-dev **安装tiff格式的图像工具包
sudo apt-get install libjasper-dev **安装Jasper图像工具包
sudo apt-get install libpng12-dev **安装png格式的图像工具包
(3)安装视频I/O包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
(4)安装gtk
sudo apt-get install libgtk2.0-dev
(5)安装优化函数包
sudo apt-get install libatlas-base-dev gfortran
GitHub上看到有人把它们放一起安装的,但是据说可能卡死,还不知道装哪一步出错了,还是一步一步来的好
(6)接下来终于开始安装Opencv
pi的在线安装比较墨迹。想直接去opencv的官网下载其源代码(https://github.com/opencv/opencv/releases)
用PC下下来后解压,发现不知道要怎么放在树莓派 pi 用户目录(/home/pi)下?SD卡找不到?(开始竟然以为和普通的软件安装包可以直接借助读卡器放入相应目录下),
这里需要用到一个牛逼的软件FileZila(度盘传送提取码4p10),简单打开应用程序,就能实现电脑和pi的文件共享。
然看几个大牛们(比如这个Joeya_ICT 的:https://blog.csdn.net/leaves_joe/article/details/67656340 下面大多都是参考这个博主的,挺全滴)都是用wget工具下载的:
cd /home/pi
wget -O opencv.zip https://github.com/opencv/opencv/releases/tag/4.1.0/4.1.0.zip
显示是已保存,但是解压缩却找不到opencv,应该是网址有误,参照 https://github.com/Tes3awy/OpenCV-3.2.0-Compiling-on-Raspberry-Pi
里的命令网址把版本号换成最新:
wget -O opencv-3.4.3.zip https://github.com/Itseez/opencv/archive/4.1.0.zip
unzip opencv.zip ****再解压,这就成功了。
(7)同参考以上的安装Contrib Libraries
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/4.1.0.zip
unzip opencv_contrib.zip **解压
(8)需要Python编程来使用OpenCV,据说需要安装Python的开发包。百度了下,简书上说linux发行版通常会把类库的头文件和相关的pkg-config分拆成一个单独的xxx-dev(el)包.以python为例, 以下情况你是需要python-dev的:
1.你需要自己安装一个源外的python类库, 而这个类库内含需要编译的调用python api的c/c++文件(比如我们在编译一个用C语言编写的python扩展模块时,因为里面会有#include<Python.h>等这样的语句,因此我们就需要先安装python-devel开发包。)
2.你自己写的一个程序编译需要链接 libpythonXX.(a|so)
其他正常使用python或者通过安装源内的python类库的不需要python-dev.(作者:Allen3333链接:https://www.jianshu.com/p/c815881f752d)好像很有道理 假装看懂,先装为敬:
sudo apt-get install python3-dev
(9)Opencv的编译
cd opencv-4.1.0 **打开opencv源码文件夹,后面的版本号据自己下载的而定。
mkdir release **新建一个名为release的文件夹,用来存放cmake编译时产生的临时文件。
cd release **// 打开这个release文件夹
cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local …
**cmake读入所有源文件之后,自动生成makefile (参照博主:kyoRan 原文:https://blog.csdn.net/kyokozan/article/details/79192646 ,注意 \前面是有个空格的)
似乎没有出现什么大问题,然后:
sudo make ** 编译
发现因为重新进的终端,没有在release文件夹下编译,没有目标指明。重新cd进到release文件夹下就OK了,用时较长:
接着:
sudo make install **安装
sudo ldconfig **更新动态链接库
ldconfig 最前面是l ,字体原因而看错成I (大写i)。就这样Opencv编译完成,可以用了,搜一个例子来试试,简单打开usb摄像头试试:(CSDN 原文:https://blog.csdn.net/xiao__run/article/details/76665126 )
#include <opencv2/highgui/highgui.hpp> //读写图像和视频的函数模块
#include <opencv2/core/core.hpp> //模块包含库的核心功能
using namespace cv; //C++中包含相应的Opencv命名空间,如果没有这个语句,那么在这个命名空间的相关资源就需要带上cv前缀,如cv::Mat,表示的是使用命名空间cv中的Mat;而有了using namespace cv这个语句后,就可以直接写Mat。标准程序库所驻之命名空间(namespace)的名称,这里的库是CV。
int main()
{
VideoCapture cap(0); //打开摄像头,VideoCapture的解析https://blog.csdn.net/weicao1990/article/details/53379881
if(!cap.isOpened()) return -1; //检测一下摄像头是否打开
Mat frame; //创建一个空图像(0*0)
while(1){
cap>>frame; //读取当前帧
imshow(" OpenCV CAM", frame); //显示一下图片,控制台窗口会在main函数结束时关闭,所以增加额外highgui函数,待用户键入数值再结束程序。
if(waitKey(20) >=0) break; // 等待20ms按键,无按键输入继续循环,任意按键输入则waitKey(20)=-1 ,跳出循环
}
return 0;
}
就这样我们就编写完了一个打开摄像头的程序,将以上代码保存为OpenUSBcamera.cpp,插上usb摄像头。
找不到,那就安装OpenCV相关库:
sudo apt-get install libcv-dev
安装完库又出幺蛾子:
先换个链接顺序试试:
猜测是链接顺序问题,不同参数的先后顺序对执行结果没有影响,只有在使用同类参数时的先后顺序才需要考虑。如果使用了多个 -L 的参数来定义库目录,g++会根据多个 -L 参数的先后顺序来执行相应的库目录:
好吧并不是以上顺序的问题,是自己把g++编译格式弄错了,生成执行文件 openusbcamera后在终端敲./ openusbcamera :
执行成功后窗口跳出来一会儿就卡了(如下),找半天不知道什么情况,师兄说很可能pi的缓存区不够大导致阻塞?
还有一种情况是,直接窗口都显示不出来:
重新开机,检查过一遍程序确实无误:
然后又有用了,窗口稳定了,但是延迟比较高,一帧一帧刷地也卡顿。
希望之后可以找到解决方法,至少测试Opencv安装成功。(原装CSI摄像头调试连接)
4.最后卸载opencv:
直接找到opencv相关目录:
sudo rm -r opencv(目录名)
卸载不干净:
$ sudo find / -name “opencv” -exec rm -i {} ;
不过运行时需要手动确认查找到的每条结果是否进行删除。