最近,在树莓派上安装能在QT中使用的opencv库,踩了许多坑,也总结出了许多经验、方法,于是写此教程。一方面作以总结,同时也为需要帮助的朋友们提供一份参考方案。教程中如有任何错误之处,也请大家指正出来。谢谢!
如果你目前的树莓派已经安装了opencv,再要叠加安装一个版本,可能会出现错误问题,所以请先卸载之前安装的版本。或者是重装系统,再进行安装。(如果没有特别重要的东西,建议重装)
cd /home/pi/opencv/build
sudo make uninstall
cd ..
rm -r build
rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*
cd /usr
find . -name "*opencv*" | xargs sudo rm -rf
先下载树莓派镜像烧录工具。
然后用读卡器将系统烧录进SD卡。
SD卡最好是16G以上的,编译出来的文件挺大的。
安装好系统,需要进入树莓派系统,如果有外接屏幕,则可以跳过此处。(强烈建议使用VNC登录树莓派,或者扩展到显示器上,这样连接更加稳定,SSH连接容易断。)
无屏幕和键盘配置树莓派WiFi和SSH
sudo passwd pi #修改 pi 密码
sudo passwd root #设置 root 密码
su root #切换到 root 用户
su pi #切换到 pi 用户
树莓派 VNC Viewer 远程桌面配置教程 及 显示 cannot currently show the desktop 的解决方法
检查更新 时间较长,建议跳过。(点击Skip)
在树莓派终端输入:
sudo raspi-config
选择Advanced Options,并进入。
选择 Expand Filesystem,扩展文件系统。
回车后会让你重启树莓派,选择立即重启。
sudo reboot
重启重新启动后,文件系统已经扩展为包括SD卡上的所有空间。可以通过执行df -h
检查输出来验证磁盘是否已扩展。
这里一定要更换。要不然会导致后面安装GTK2.0会失败。
①. 在树莓派终端输入:sudo nano /etc/apt/sources.list
,编辑文件。
【Ctrl+o】编辑文件,回车进行编辑,将原本的所有内容全部删掉,把以下内容复制到文件中。
清华镜像源
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi
先按键盘上的ctrl+o,再按回车保存,再按ctrl+x退出 nano 编辑器回到命令行界面。
②. 同理:sudo nano /etc/apt/sources.list.d/raspi.list
,编辑文件。
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
③. 更新系统
在树莓派终端输入:sudo apt-get update && sudo apt-get upgrade
,更新系统。(这里时间还挺长,多等一会。)
之后,建议重启一下树莓派sudo reboot
。
sudo apt-get install build-essential cmake git pkg-config
sudo apt-get install libjpeg8-dev
sudo apt-get install libtiff5-dev
sudo apt-get install libjasper-dev
sudo apt-get install libpng12-dev
sudo apt-get install libglu1-mesa-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
sudo apt-get install libatlas-base-dev gfortran
我下载的是opencv-3.4.3版本,选择其他版本也可以,直接按照网站去下载源代码。下载opencv-contrib必须和opencv版本一致。
上传工具下载:FileZilla(使用教程)
①. 下载Opencv-3.4.3
wget -O opencv-3.4.3.zip https://github.com/Itseez/opencv/archive/3.4.3.zip
下载地址:https://github.com/Itseez/opencv/archive/3.4.3.zip
这个下载可以从官网下载好,之后再从PC端传到树莓派上,上传工具下载地址在上面。
②. 下载OpenCV_contrib-3.4.3
contrib文件必须使用wget下载,从官网下载的编译会报错,我就因为这个问题,停顿了两天。
wget -O opencv_contrib-3.4.3.zip https://github.com/Itseez/opencv_contrib/archive/3.4.3.zip
③. 解压Opencv-3.4.3和Opencv_contrib-3.4.3
unzip opencv-3.4.3.zip
unzip opencv_contrib-3.4.3.zip
进入/home/pi/opencv_contrib-3.4.3/modules/xfeatures2d/src/
目录:
看看你的文件夹中是否有下面文件,如果没有的话,请下载这些文件,然后拷贝到此目录下。要不后面会报错。
下载链接:https://pan.baidu.com/s/13g_OJlLEXaU9kV2MEKvi2w
提取码:1fhi
sudo apt-get install cmake-gui
cd /home/pi/opencv
mkdir build
sudo cmake-gui
• CMAKE_BUILD_TYPE 是编译方式
• CMAKE_INSTALL_PREFIX 是安装目录
• OPENCV_EXTRA_MODULES_PATH 是加载额外模块
• BUILD_EXAMPLES 是编译例程
设置一下参数(按图中蓝色设置):
设置完毕之后,再点击Configure。 出现 Configuring done,接着再点击Generate,等待一会。
出现Generating done,设置参数成功,关闭Cmake界面。
进入build/module文件夹,查看是否添加入了contrib的库,博主之前因为一直添加不上contrib库,折腾了半天。(face模型是contrib库的模型,看这个有没有)
cd ..
cp -r build ./build1
如果出错了,可以删除build文件夹,重新编译,不需要也可以不备份。
sudo nano /etc/dphys-swapfile
打开 / etc / dphys - swapfile 文件。sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
注意:增加交换空间的大小可能烧坏树莓派 SD卡,因此在我们后续编译完成之后就再改回CONF_SWAPSIZE
cd /home/pi/opencv/build
sudo make -j4
sudo make install
sudo ldconfig
sudo nano /etc/dphys-swapfile
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start
sudo nano /etc/ld.so.conf.d/opencv.conf
/usr/local/lib
?
sudo ldconfig
sudo nano /etc/bash.bashrc
打开bash.bashrc配置文件 在文件末尾加入以下代码:PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存退出后输入命令sudo reboot
重启树莓派。
我们可以通过下面命令来查看已添加的PKG_CONFIG_PATH环境变量:
echo $PKG_CONFIG_PATH
sudo apt-get install qt5-default
sudo apt-get install qtcreator
/usr/bin/arm-linux-gnueabihf-gcc
即可。[ 86%] Linking CXX executable …/…/bin/cpp-example-detect_mser
CMakeFiles/example_detect_mser.dir/detect_mser.cpp.o: In function draw(void*)’: detect_mser.cpp:(.text._ZL4drawPv+0x5a): undefined reference to gluLookAt’
CMakeFiles/example_detect_mser.dir/detect_mser.cpp.o: In function main’: detect_mser.cpp:(.text.startup.main+0x2523): undefined reference to gluPerspective’
collect2: error: ld returned 1 exit status
make[2]: *** [samples/cpp/CMakeFiles/example_detect_mser.dir/build.make:130: bin/cpp-example-detect_mser] Error 1
make[1]:***[CMakeFiles/Makefile2:24582:samples/cpp/CMakeFiles/example_detect_mser.dir/all] Error 2
make: *** [Makefile:163: all] Error 2
link.txt
文件中添加libGLU.so
的目录。目的是为了读取到此文件。 /opencv/build/samples/opengl/CMakeFiles/example_opengl_opengl.dir/link.txt
/opencv/build/samples/cpp/CMakeFiles/example_cpp_detect_mser.dir/link.txt
参考解决方法:https://github.com/opencv/opencv/issues/12648
树莓派安装Opencv方法总结!包括各种报错解决方法!
树莓派3B/3B+和4B安装OpenCV教程 (详细教程)
树莓派3和4B安装OpenCV教程(编译源码,一次成功)提供安装好OpenCV的系统镜像
树莓派4B:安装QT5开发环境