基于ARM架构开发板——树莓派4B上源码编译安装OpenCV和OpenCV contrib
本文主要记录笔者在树莓派4B安装opencv的过程,算是对这段时间的一个学习总结,也方便其他新手入门,如有侵权,请及时联系我删除。
在此特别感谢OpenCV团队、树莓派实验室和我的两位学长,我的这次安装也是根据他们写的博文和建议完成的,他们在这次安装给我提供了重要的帮助,我从中我学习了很多新知识。
参考资料:
https://www.cnblogs.com/tanshengjiang/p/13861494.html
https://mp.weixin.qq.com/s/dWrDBMqHqAl4iBVAS50_uA (opencv中国团队官方文档)
https://docs.opencv.org/master/d0/d76/tutorial_arm_crosscompile_with_cmake.html (opencv官方文档,有一定英语水平可以看这个)
https://blog.csdn.net/simonforfuture/article/details/101716181
https://www.deciphertechnic.com/install-opencv-python-on-raspberry-pi/
好了,正文开始:
环境:树莓派4B python 3.7 基于Debian的树莓派官方系统(Raspbian Buster系统),可以到官网(https://www.raspberrypi.org/downloads/raspberry-pi-os/)下载。
1.安装之前先更新一下环境
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
如果sudo rpi-update出错则先跳过不管,继续
2.安装一下必要的依赖
sudo apt-get install build-essential cmake pkg-config
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk2.0-dev libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran
3.安装开发工具(python3和pip)
sudo apt-get install python3 python3-setuptools python3-dev
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
4.下载OpenCV和OpenCV-contrib的包
笔者这里安装的是4.5.4版本
wget -O opencv-4.5.4.zip https://github.com/opencv/opencv/archive/refs/tags/4.5.4.zip
wget -O opencv_contrib-4.5.4.zip https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.4.zip
unzip opencv-4.5.4.zip
unzip opencv_contrib-4.5.4.zip
下载完直接解压,如果这样下载比较慢的话,可以到网站直接下载。
5.安装opencv需要的库
pip3 install numpy
这一步笔者没有安装到超级用户,大家可以自行选择
6.开始进行编译Opencv,一般编译都是使用cmake自动编译生成makefile
cd ~
mv opencv_contrib-4.5.4 opencv-4.5.4/
cd ~/opencv-4.5.4
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D BUILD_opencv_xfeatures2d=OFF \ # 这个模块开启时会自动下载一些模型,有些模型在国外服务器,如果用不到里面的算法,这里不推荐打开。
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D ENABLE_NEON=ON \ # NEON指令是针对ARM平台的加速指令,在ARMv7及以上支持
-D WITH_TENGINE=ON \ # Tengine是专门针对ARM平台的DNN后端,能够加速DNN模块,此选项打开之后需要保持开发板联网
-D OPENCV_GENERATE_PKGCONFIG=ON \ # 此选项方便调用OpenCV库
-D OPENCV_ENABLE_NONFREE=ON \
-D OPENCV_PYTHON3_INSTALL_PATH=/usr/lib/python3/dist-packages \ # 这里需要修改成你的开发板上对应的位置
-D OPENCV_EXTRA_MODULES_PATH=/home/pi/opencv-4.5.4/opencv_contrib-4.5.4/modules \ # 这里需要修改成你的opencv_contrib所在目录
-D PYTHON_EXECUTABLE=/usr/bin/python3.7 \ # 这里需要修改成你Python3所在的目录,将会自动安装python版本的OpenCV库
-D BUILD_EXAMPLES=ON ..
增加swap空间
将swap大小从100MB增加到1024MB,可以方便OpenCV使用Pi的4个核进行编译
sudo vim /etc/dphys-swapfile
找到 CONF_SWAPSIZE 这个变量,将100改成1024,然后保存退出。使用如下命令重启:
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
7.编译安装opencv
这个过程比较漫长,我大概编译安装了四个多小时。
make -j4
sudo make install
sudo ldconfig
编译完成后记得 ,将swap大小从1024MB改回100MB
sudo vim /etc/dphys-swapfile
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
8.上面的步骤完成后,可以测试一下OpenCV是否安装成功。
终端依次输入以下命令:
python3
import cv2
print(cv2.__version__)
如果能够正确打印OpenCV版本,恭喜你,安装成功!
9.测试运行
cd ~/opencv-4.5.4/samples/cpp/example_cmake/
编译一下先cmake . 再make
cmake .时,我出现了一个问题
报错说配置不完整,于是我忽略,继续往下走然后这样:如下图:
刚开始我还以为是缺了什么文件没下下来,去官网找,找到了相关的文档,但是也不知道哪里能把缺失的文档下下来,经过多方求助,在一个江湖号称“盖世神伦”的学长那里得到答案。
问题出在:我安装的opencv4.x.x版本是4开头的,库的文件位于/usr/local/include/opencv4,但是执行这个cmake .命令的时候,它在/usr/local/include/下面检索的是opencv2,我们树莓派上/usr/local/include/这个路径下只有opencv4,找不到opencv2那是再正常不过的了,所以就报错了。那么是不是要到官网再去找这个所谓的opencv2文件下下来呢?幸运的是,并没有那么麻烦,其实opencv2这个文件在opencv4这个目录下面(/usr/local/include/opencv4/opencv2),即cmake .所需要的路径其实是/usr/local/include/opencv4/opencv2,而不是/usr/local/include/opencv4。
因此,我就有了两种解决思路,第一种,修改CMakefile.txt里面的环境变量,这样,就能顺利地找到这个opencv2文件了,第二种,将opencv4里面的文件拷贝复制出来一份,放到/usr/local/include/下面,这样,不用修改路径,也能通过原有的环境变量路径找到cmake .所需要的文件。第一种方法大家可以补充哈。在这里我使用第二种思路。具体操作方法如下:
cd /usr/local/include/
sudo cp -r opencv4/opencv2/ opencv2
cd ~/opencv-4.5.3/samples/cpp/example_cmake
rm -r CMakefiles/ CMakeCache.txt
cmake .
make
补充说明一下:rm -r CMakefiles/ CMakeCache.txt是为了把上一次编译失败的cmake临时文件删掉,不删掉的话,继续编译还是会出错的,所以这一点至关重要!
这样,就成功了,此时ls一下,你的目录下面会出现一个可执行文件:opencv_example,大胆运行即可
./opencv_example
当你从屏幕中看到一张帅气的脸,说明安装成功!(注:需要摄像头才能看到帅气的脸)!
或者,你也测试运行一下世界上最快的人脸检测算法libfacedetection给出的OpenCV DNN的例子,看看OpenCV是否安装成功:
https://github.com/ShiqiYu/libfacedetection/tree/master/example/opencv_dnn/cpp
欢迎大家批评指正,有问题可评论区留言,谢谢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本