我是用的是树莓派4B+4G内存,32G内存卡,经过好几天的折腾,终于装上了OpenCV,现在记录一下,也方便小白。(安装并非原创,我是参考悠悠happy的,如果有侵权联系我删除。)
这是他的原文地址https://blog.csdn.net/zqxdsy/article/details/102673226
我第一安装到24%就失败了,然后删除release文件夹,重新编译后安装就可以。然后还有换源很重要,直接关系能不能装成功。因为我用的是2020的官方系统。
【注意】这里的树莓派系统是Raspbian-buster系统,在写系统源链接时要注意是buster,网上很多教程都是之前stretch版本,容易出错!
具体换源参考https://blog.csdn.net/zqxdsy/article/details/102574239
(他文中说了换pip,我没有换这个)
下面就把安装方式搬过来,我比较喜欢的是他用多线程编译,速度比较快,我用了一个小时多一点编译完成,看其他教程要4个多小时。下面换源方式我没有用,我是用上面链接的换。
我的镜像备份出来接近32G,我不知道怎么提取小的出来。
【准备工作】
1.这里我用的是官方Raspbian-buster-full系统,首先要更换源为清华源,避免后面下载gtk2.0失败。
换源方法:https://blog.csdn.net/zqxdsy/article/details/102574239
2. 可以外接屏幕也可以使用VNC远程操作,在编译过程中使用tee命令将编译过程保存下来,可以很方便地进行查看,不用担心远程连接中断的问题,后面会说明,可跳过这里。
【正式安装】
一、安装OpenCV所需要的依赖工具和一些图像视频库。
1.安装构建必需工具
// 安装build-essential、cmake、git和pkg-config
sudo apt-get install build-essential cmake git pkg-config
2.安装常用的图像工具包
// 安装jpeg格式图像工具包
sudo apt-get install libjpeg8-dev
// 安装tif格式图像工具包
sudo apt-get install libtiff5-dev
// 安装JPEG-2000图像工具包
sudo apt-get install libjasper-dev
// 安装png图像工具包
sudo apt-get install libpng12-dev
3.安装视频工具包,最后的是v4l中4后面的是 英文字母“l”
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
4.安装gtk2.0,若下载出错请查看源是否为清华源或中科大源
sudo apt-get install libgtk2.0-dev
5.安装优化函数包
sudo apt-get install libatlas-base-dev gfortran
二、编译OpenCV源码
1.下载opencv3.4.3和opencv_contrib3.4.3(可以选择其他版本,不过二者版本号需一致)
法一:直接下载解压使用
OpenCV源码下载地址(OpenCV源码可直接下载,下面的扩展包最好用wget下载)
OpenCV_contrib下载地址(我是直接下载的,有的说直接下载contrib包后面编译会出错,因此需要使用wget下载contrib,推荐法二使用wget下载方式,避免出错)
法二:使用wget下载OpenCV源码
//** 下载后需要解压到用户目录下
// 下载OpenCV
wget -O opencv-3.4.3.zip https://github.com/Itseez/opencv/archive/3.4.3.zip
// 解压OpenCV
unzip opencv-3.4.3.zip
// 下载OpenCV_contrib库:
wget -O opencv_contrib-3.4.3.zip https://github.com/Itseez/opencv_contrib/archive/3.4.3.zip
// 解压OpenCV_contrib库:
unzip opencv_contrib-3.4.3.zip
2.将下载的源码解压缩,并在终端中进入源码目录
//具体路径请以实际为准
cd ~/opencv-3.4.3
3.新建release文件夹,用来存放cmake编译时产生的临时文件
// 新建release文件夹
mkdir release
// 进入release文件夹
cd release
4.设置cmake编译参数,安装目录默认为/usr/local 。
注意参数名、等号和参数值之间不能有空格,每行末尾“\”之前有空格,这里使用换行符“\”是为了看起来工整,参数值最后是两个英文的点,意思是上级目录(【注意】如果在root用户下执行cmake命令,请将OPENCV_EXTRA_MODULES_PATH的值改为绝对路径,如:/home/pi/opencv_contrib-3.4.3/modules):
/** CMAKE_BUILD_TYPE是编译方式
* CMAKE_INSTALL_PREFIX是安装目录
* OPENCV_EXTRA_MODULES_PATH是加载额外模块
* INSTALL_PYTHON_EXAMPLES是安装官方python例程
* BUILD_EXAMPLES是编译例程(这两个可以不加,不加编译稍微快一点点,想要C语言的例程的话,在最后一行前加参数INSTALL_C_EXAMPLES=ON,要C++例程的话在最后一行前加参数INSTALL_C_EXAMPLES=ONINSTALL_CXX_EXAMPLES=ON)
**/
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.3/modules \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_CXX_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON ..
配置成功后如下图
因为下一步的编译会使用release文件中的东西,假如编译失败后还要重新进行cmake,比较耽误时间,这里可以直接备份一下cmake好的release文件夹,命名为release1,重新make的时候可以拿来用。
//返回上层目录
cd ..
//备份release文件夹
cp -r release ./release1
5.开始编译
/**
* 以管理员身份,否则容易出错
* make命令参数-j4指允许make使用最多4个线程进行编译,这样编译速度会更快
* 可以根据自己机器的情况进行更改
* 使用tee命令可以将编译过程中终端显示的信息保存到make.log文件中,便于查看,这样即使VNC断线,终端的* 信息太多看不到,也可以通过make.log文件查看编译过程。
**/
sudo make -j4 2>&1 | tee make.log
// 安装
sudo make install
// 更新动态链接库
sudo ldconfig
如果看到进度编译到100%,那就说明编译安装成功了。
6.其他配置
这步是为了设置库的路径,相当于windows下的环境变量,便于使用OpenCV库,也可以不进行设置,使用的时候说明路径也可。例如在编译时说明使用库的路径是 -L/usr/local/lib
(1)配置opencv.conf
打开opencv.conf配置文件
//这里我使用的是gedit,类似于记事本,树莓派默认的是nano,也可以使用vim,怎么方便怎么用
sudo gedit /etc/ld.so.conf.d/opencv.conf
在末尾添加如下内容
/usr/local/lib
?
注意:?表示一个空格,可能原因是有的语言要求最后有一个空格才可以编译通过。
加载一下
sudo ldconfig
(2)打开bash.bashrc配置文件
sudo gedit /etc/bash.bashrc
在最后添加如下内容
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
重启树莓派或者点击注销用户重新登录
sudo reboot
7.检测OpenCV使用是否正常
法一:C++程序
//C++程序,使用OpenCV读取一张图片
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat src=imread("~/1.jpg");
imshow("src",src);
waitKey(0);
return 0;
}
保存该文件为imshow.cpp,在终端使用下面命令进行编译(若在前面设置了环境,可以不加-L/usr/local/lib)。
g++ imshow.cpp -o imshow -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs
给编译好的文件添加可执行权限并执行
//添加执行权限
sudo chmod a+x imshow
//执行程序
./imshow
法二:Python程序
安装的Raspbian系统自带Python编译器,若没有安装,执行下列命令进行安装
sudo apt-get install python-dev python3-dev
python程序,使用OpenCV画一条直线
import cv2
import numpy as np
cv2.namedWindow("gray")
img = np.zeros((512,512),np.uint8)#生成一张空的灰度图像
cv2.line(img,(0,0),(511,511),255,5)#绘制一条白色直线
cv2.imshow("gray",img)#显示图像
#循环等待,按q键退出
while True:
key=cv2.waitKey(1)
if key==ord("q"):
break
cv2.destoryWindow("gray")
保存该文件为opencv_test.py,并在终端运行程序
python3 ./opencv_test.py
运行结果如下: