树莓派安装Opencv方法总结,包括各种报错解决方法

前言:最近因为毕设在树莓派上使用Opencv,因此花了两天时间分别装了opencv-3.4.0版本、opencv-4.0.0版本,期间遇到了各种坑(我感觉遇到了安装过程几乎所有的坑了T T),但最后在网上查找相关问题都一步步解决了,写下这篇博客就是总结一下自己的安装经历以及遇到的坑,以后再次安装就可以直接看自己的博客了哈哈!同时也是希望能够系统的总结一下遇到的坑,可以不用遇到一个问题就去查一次百度。最后希望能够帮助到想用树莓派安装opencv的你!

我在安装过程中记录了出现的错误,本文较长,可针对目录进行选择性查阅,不过安装的话还是建议耐心的看一下。

注:文章已经总结了较多易出现的报错问题,也可以参考评论区方法,如需要帮助评论区留言,祝成功!

目录

*
卸载opencv
安装opencv

+ 安装前环境准备
+
* 安装树莓派系统
* 拓展树莓派的文件系统
* 更换树莓派源为国内镜像源
* 给树莓派增加交换空间SWAP
+ 正式安装
+
* 更新系统
* 安装OpenCV所需要依赖的工具和一些图像视频库
* 下载opencv源码
* 配置CMake编译OPencv环境
* 设置CMake编译参数,安装目录默认为 /usr/local
* 编译OpenCV
配置Opencv

+ 配置opencv.conf
+ bash.bashrc 配置文件
实例测试
问题汇总

+ 树莓派安装软件,有时候会出现 “下列软件包有未满足的依赖关系:… 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系”
+ 遇到想用 aptitude 解决依赖包问题,但是使用 apt-get 安装 aptitude 时出现依赖包错误
+ fatal error: /opencv2/xfeatures2d/cuda.hpp: No such file or directory 类问题
+ 提示缺少boostdesc_bgm.i 等文件的问题解决方案
+ 解决 sudo ldconfig /sbin/ldconfig.real: xxx 不是符号连接 问题
+ fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory
+ Package opencv was not found in the pkg-config search path.问题
+ 树莓派编译过程死机/卡死 如99%在cv2.cpp.0处
+ fatal error: stdlib.h: 没有那个文件或目录 #include_next

卸载opencv

为什么先说卸载opencv呢?因为大家都说 opencv 从入门到卸载嘻嘻,开个玩笑,因为很有可能安装的版本错误啊等等各种问题导致你要重新安装!

  • 查看已安装的opencv版本
  • pkg-config --modversion opencv
  • 卸载
  • 方法1:找到安装opencv的build目录,进入该目录进行卸载。比如我安装在/home/pi/Downloads/opencv-4.0.0/build
cd /home/pi/Downloads/opencv-4.0.0/build
sudo make uninstall
cd  ..

rm -r build
  • 方法2:不知道安装目录在哪,则可以重新建立build目录安装对应版本,然后再执行上边卸载步骤。然后清理/usr中所有opencv相关项
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
  • 移除python相关
  • apt-get remove-doc opencv-data python-opencv

安装opencv

安装前环境准备

安装树莓派系统

  1. 去官网下载系统镜像,链接贴上:Raspberry Pi OS Downloads
    下载如下带桌面的Raspberry Pi OS就可以。
    树莓派安装Opencv方法总结,包括各种报错解决方法
    下载完成之后解压, 注意路径中不能有中文字符,避免在使用镜像写入工具时出错。
  2. 格式化内存卡
    准备一个16GB或者以上的内存卡,在我的电脑右键–管理–磁盘管理,查看是否只有一个分区,应该是只有一个分区,且为FAT32.

  3. 写入镜像文件
    将 .img 镜像文件写入 SD卡,可以使用 Win32 Disk Imager,下载链接:Win32 Disk Imager下载
    运行Win32 Disk Imager之后,选择我们下载解压后的img镜像,设备选择TF卡,点击写入,确定,等待写入完成即可。

    树莓派安装Opencv方法总结,包括各种报错解决方法

4.将SD插入树莓派(最好配个显示屏)上电后系统即会开始安装系统,进行简单设置后即可开始使用。

; 拓展树莓派的文件系统

  1. 在树莓派终端(或者SSH)上输入: $ sudo raspi-config
  2. 然后选择”高级选项”菜单项,选择第7个
    树莓派安装Opencv方法总结,包括各种报错解决方法
  3. 然后选择”扩展文件系统”
    树莓派安装Opencv方法总结,包括各种报错解决方法
    选择第一个回车,会让你重启树莓派,选择立即重启 注:如果不能重启,则输入 sudo reboot重启
  4. 重新启动后,文件系统已经扩展为包括micro-SD卡上的所有空间。可以通过执行 df -h 检查输出来验证磁盘是否已扩展。
    树莓派安装Opencv方法总结,包括各种报错解决方法

更换树莓派源为国内镜像源

更换镜像源主要就是为了解决树莓派每次下载都要”远隔重洋”去获取资源时的”龟速”问题

  1. 在树莓派的命令行界面输入 sudo nano /etc/apt/sources.list使用nano编辑器编辑source.list
  2. 使用键盘方向键控制,在第一行开头加一个 #,把下面的内容拷贝到最后一行之后 清华镜像源 注:网址末尾的 raspbian 重复两次是必须的。因为 Raspbian 的仓库中除了APT软件源还包含其他代码。APT软件源不在仓库的根目录,而在 raspbian/ 子目录下。
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib

中科大镜像源

deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
  1. 先按键盘上的 ctrl+ o,再按回车保存,再按 ctrl+ x退出 nano 编辑器回到命令行界面。再输入 sudo apt-get update命令更新到清华大学/中国科技大学镜像源最新的软件列表。
  2. 今后在树莓派命令行中执行 sudo apt-get install 软件名时便会自动从清华/中科大开源软件镜像站高速下载
  3. 最好再重启一下树莓派 sudo reboot

也可以参考该博文:树莓派换镜像源 清华大学镜像源教程

给树莓派增加交换空间SWAP

在开始编译前,建议你增加交换空间。这将使你使用树莓派的所有四个内核来编译OpenCV,而不会由于内存耗尽导致编译挂起。

  1. 输入 sudo nano /etc/dphys-swapfile打开 / etc / dphys – swapfile文件
  2. 然后编辑 CONF_SWAPSIZE 变量为2048或1024:
    树莓派安装Opencv方法总结,包括各种报错解决方法
  3. 重新启动交换服务
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

注意:增加交换空间的大小可能烧坏树莓派 microSD卡,因此在我们后续编译完成之后就再改回CONF_SWAPSIZE

正式安装

更新系统

输入 sudo apt-get update && sudo apt-get upgrade更新系统

安装OpenCV所需要依赖的工具和一些图像视频库

  1. 安装CMake开发人员工具 输入如下命令安装build-essential、cmake、git和pkg-config
sudo apt-get install build-essential cmake git pkg-config
  1. 安装常用图像工具包:使我们可以从磁盘加载各种图像文件格式
  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
  1. 安装常用视频库:使我们从磁盘读取各种视频文件格式,以及直接使用视频流
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
  1. 安装GTK2.0
sudo apt-get install libgtk2.0-dev
  1. 安装数值函数优化包
sudo apt-get install libatlas-base-dev gfortran
  1. 装Python 2.7和Python 3头文件,这样我们就可以使用Python绑定编译OpenCV
sudo apt-get install python2.7-dev python3-dev

下载opencv源码

我下载的是opencv4.0.0版本,选择其他版本也可以,直接按照网站去下载源代码

  • 下载Opencv-4.0.0 方法1:树莓派终端输入命令
wget -O opencv-4.0.0.zip https://github.com/Itseez/opencv/archive/4.0.0.zip
 方法2:电脑上进入该网页 ://github.com/Itseez/opencv/archive/4.0.0.zip下载后通过U盘拷贝到树莓派
* **下载OpenCV_contrib-4.0.0** 方法1:树莓派终端输入命令  -O opencv_contrib-4.0.0.zip https://github.com/Itseez/opencv_contrib/archive/4.0.0.zip 方法2:电脑上进入该网页 ://github.com/Itseez/opencv_contrib/archive/4.0.0.zip下载后通过U盘拷贝到树莓派
* **解压Opencv-4.0.0和OpenCV_contrib-4.0.0**

</code></pre>
<p>unzip opencv-4.0.0.zip
unzip opencv_contrib-4.0.0.zip</p>
<pre><code>
#### 配置CMake编译OPencv环境

使用CMake设置编译,然后运行 make 来编译OpenCV。这是整个过程中耗时最长的步骤,大约4个小时。回到OpenCV存储库并创建 **build** 文件夹,用来存放 CMake 编译时产生的临时文件。

1. 进入opencv安装目录 _**注:我这里将解压Opencv-4.0.0和OpenCV_contrib-4.0.0在了/home/pi/opencv目录下**_
  -

</code></pre>
<p>cd /home/pi/opencv/opencv-4.0.0</p>
<pre><code>2. 新建 build 文件夹,存放 CMake 编译时产生的临时文件
  -

</code></pre>
<p>mkdir build</p>
<pre><code>3. 进入 build 文件夹
  -

</code></pre>
<p>cd ./build</p>
<pre><code>
#### 设置CMake编译参数,安装目录默认为 /usr/local

首先进入build 文件夹  /home/pi/opencv/opencv-4.0.0/build

注意参数名、等号和参数值之间不能有空格,每行末尾"\"之前有空格,这里使用换行符"\"是为了看起来工整,参数值最后是两个英文的点

_**注:如果在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 是编译例程
* OPENCV_GENERATE_PKGCONFIG : 自动配置pkg-config , 因为OpenCV 4 配置默认不产生 opencv4.pc

</code></pre>
<p>sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=/home/pi/opencv/opencv_contrib-4.0.0/modules \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_CXX_EXAMPLES=ON \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D BUILD_EXAMPLES=ON ..</p>
<pre><code>
_**注:想要C语言的例程的话,在最后一行前加参数INSTALL_C_EXAMPLES=ON**_

_**注:OPENCV_GENERATE_PKGCONFIG=ON建议一定要加上,博主因为当时没加这个在opencv.pc这块绕了半天,官方解释如下:**_

</code></pre>
<p>Add this flag when running CMake: -DOPENCV_GENERATE_PKGCONFIG=ON Will generate the .pc file for pkg-config and install it. Useful if not using CMake in projects that use OpenCV Installed as opencv4, usage: pkg-config --cflags --libs opencv4</p>
<pre><code>
帮大家翻译下 ^ ^:

</code></pre>
<p>当运行CMake: -DOPENCV_GENERATE_PKGCONFIG=ON时添加这个标志将生成pkg-config的.pc文件并安装它。如果在使用OpenCV作为opencv4安装的项目中没有使用CMake,则使用"pkg-config——cflags——libs opencv4"</p>
<pre><code>
配置完成后如下:

![树莓派安装Opencv方法总结,包括各种报错解决方法](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/20210111164435590.png)

完成后我们备份一下build文件夹:

</code></pre>
<p>cd ..</p>
<p>cp -r build ./build1</p>
<pre><code>
#### 编译OpenCV

1. **编译** 输入命令  make -j4 2>&1 | tee make.log开始编译 注意: ​ 以管理员身份,否则容易出错 ​ make命令参数-j4指允许make使用最多4个线程进行编译,这样编译速度会更快!但是 **如果没有增加交换空间的话就老老实实只用make** ​ 使用tee命令可以将编译过程中终端显示的信息保存到make.log文件中,便于查看,这样即使VNC断线,终端的* 信息太多看不到,也 可以通过make.log文件查看编译过程。 **如果有幸一次就看到进度编译到100%,那么恭喜你是天选之子,说明编译安装成功。如果没有的话,那也很正常,文章末尾总结了许多可能出现的问题。**

![](https://img-blog.csdnimg.cn/20210111164457383.JPG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNjQyMTQy,size_16,color_FFFFFF,t_70#pic_center)

1. **安装** 输入  make install开始安装
![树莓派安装Opencv方法总结,包括各种报错解决方法](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/20210111164515894.png)
2. 更新动态链接库 输入  ldconfig _**注意:是 L 的小写 l 而不是 i 的大写哦**_

!!!!这个时候你是不是忘记了什么事情?

**对! 不要忘记回到 /etc/dphys-swapfile 文件并将 CONF_SWAPSIZE 重置为 100,然后重新启动交换服务**

</code></pre>
<p>sudo nano /etc/dphys-swapfile</p>
<pre><code>
修改CONF_SWAPSIZE=100

重启交换服务

</code></pre>
<p>sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start</p>
<pre><code>
安装就结束了,可以删除之前的源代码包,释放空间

 -rf opencv-4.1.0 opencv_contrib-4.1.0

## 配置Opencv

### 配置opencv.conf

输入命令打开opencv.conf配置文件

</code></pre>
<p>sudo nano /etc/ld.so.conf.d/opencv.conf</p>
<pre><code>
在文件末尾加入如下内容,并保存推出

</code></pre>
<p>/usr/local/lib
 ?</p>
<pre><code>
如图所示:
![树莓派安装Opencv方法总结,包括各种报错解决方法](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/20210111164543688.png#pic_center)

输入如下命令,更新下ldconfig

</code></pre>
<p>sudo ldconfig</p>
<pre><code>
### bash.bashrc 配置文件

输入命令  nano /etc/bash.bashrc打开bash.bashrc配置文件

在最后添加如下内容:( **后面会讲pkgconfig和PKG_CONFIG_PATH是什么**)

</code></pre>
<p>PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH</p>
<pre><code>
![树莓派安装Opencv方法总结,包括各种报错解决方法](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/20210111164600159.png)

保存退出后输入命令  reboot重启树莓派

我们可以通过下面命令来查看已添加的PKG_CONFIG_PATH环境变量:


echo $PKG_CONFIG_PATH

实例测试

我们安装 cmake gui,使用图形界面会比较方便些

sudo apt-get install cmake-gui

创建文件名为 Thresholds.cpp 并编写 opencv 的代码,代码如下:

#include
#include
#include

using namespace std;
using namespace cv;

int Threshold_size = 127;
int Threshold_max = 255;
int Thres_type = 0;
int Type_max = 4;
Mat src,dst,gray;

void Threshold_Demo(int , void *);

int main(int argc,char** argv)
{
    src = imread("/home/pi/opencv/projectTest/abc.jpg",IMREAD_COLOR);
    if(!src.data)
    {
        cout<<"img load error..."<<endl;
        return -1;
    }
    namedWindow("src1",WINDOW_NORMAL);
    resizeWindow("src1",400,500);
    imshow("src1",src);
    namedWindow("out",WINDOW_NORMAL);
    resizeWindow("out",400,500);
    cvtColor(src,gray,COLOR_BGR2GRAY);

    createTrackbar("thresh_size","out",&Threshold_size,Threshold_max,Threshold_Demo);
    createTrackbar("threshold_type","out",&Thres_type,Type_max,Threshold_Demo);
    Threshold_Demo(0,0);

    waitKey(0);
    return 0;
}

void Threshold_Demo(int , void *)
{
    threshold(gray,dst,Threshold_size,Threshold_max,Thres_type);
    imshow("out",dst);
}

图片 abc.jpg

树莓派安装Opencv方法总结,包括各种报错解决方法

将 .cpp 文件以及图片 abc.jpg 一并放在/home/pi/opencv/projectTest/abc.jpg 目录下.

在刚刚的projectTest文件夹里新建一个.txt文件,取名为CMakeLists.txt。CMakeLists的内容可以到Opencv的安装目录中找到Opencv官方的例子中直接复制过来就可以,不过需要改几个地方。 (注意:CMakeLists.txt不是CmakeLists.txt,否则报错,之前看一个博主可能写错了写的CmakeLists.txt)

cmake needs this line
cmake_minimum_required(VERSION 2.8)

Define project name
project(opencv_example_project)

Find OpenCV, you may need to set OpenCV_DIR variable
to the absolute path to the directory containing OpenCVConfig.cmake file
via the command line or GUI
find_package(OpenCV REQUIRED)

If the package has been found, several variables will
be set, you can find the full list with descriptions
in the OpenCVConfig.cmake file.

Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")

if(CMAKE_VERSION VERSION_LESS "2.8.11")
  # Add OpenCV headers location to your include paths
  include_directories(${OpenCV_INCLUDE_DIRS})
endif()

Declare the executable target built from your sources
add_executable(opencv_example opencvtest.cpp)

Link your application with OpenCV libraries
target_link_libraries(opencv_example ${OpenCV_LIBS})

add_executable中的opencvtest.cpp文件改成自己写的代码的文件名,这样才可以知道编译的是哪个文件。

使用cmake-gui编译

cmake-gui

打开cmake-gui后看到界面,源代码处我们选择刚刚创建的文件夹,二进制文件一样也选择刚刚创建的文件夹,点击Add Entry,输入Opencv的安装位置,选择build文件夹。如图所示:

树莓派安装Opencv方法总结,包括各种报错解决方法

接着分别点击Configure和Generate,显示Configure Done和Generate Done就说明成功。

回到终端,cd进入刚刚的文件夹,输入 ls查看生成了可执行文件 opencv_example

输入 ./opencv_example后程序运行效果如图所示:

树莓派安装Opencv方法总结,包括各种报错解决方法
树莓派安装Opencv方法总结,包括各种报错解决方法

程序效果为拖动 TrackBar 来改变设定阈值Thresh_size以及黑白二值化类型threshold_type,从而改变图像处理结果。

问题汇总

树莓派安装软件,有时候会出现 “下列软件包有未满足的依赖关系:… 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系”

解决方法:

​ 安装aptitude,它能智能添加依赖文件

sudo apt-get install aptitude

​ 然后使用aptitude安装相关软件

sudo aptitude install &#x8F6F;&#x4EF6;&#x540D;

注意:在使用该命令 sudo aptitude install &#x8F6F;&#x4EF6;&#x540D; 时需要注意,在最开始出现选择Y/n/q/?时要选择’n’。这样才是降级安装。不然还是会安装失败。之后就可以一路选’Y’了。

遇到想用 aptitude 解决依赖包问题,但是使用 apt-get 安装 aptitude 时出现依赖包错误

针对上述问题,你想用aptitude 解决依赖关系,但是偏偏执行 sudo apt-get install aptitude命令时又出现依赖包错误

树莓派安装Opencv方法总结,包括各种报错解决方法

问题原因:

​ 树莓派版本和镜像源不对应!相关信息如下:

树莓派安装Opencv方法总结,包括各种报错解决方法
解决方法:

​ 使用命令 lsb_release -a查看当前树莓派系统版本,具体信息如下,此版本的代号为 ” buster

pi@raspberrypi:~ $ lsb_release -a
No LSB modules are available.

Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:    10
Codename:   buster

然后去看了一下使用镜像源的地址,使用的版本代号为 ” stretch

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

那么把对应的 ” stretch” 改为” buster“就行了

fatal error: /opencv2/xfeatures2d/cuda.hpp: No such file or directory 类问题

这个是我在装opencv-3.4.0版本的时候遇到的问题,解决方法也是参考了一位博主的分享,在此感谢!

问题如下:

/usr/local/arm/opencv-3.4.0/opencv_contrib-3.4.0/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp:42:10:
fatal error: /opencv2/xfeatures2d.hpp: No such file or directory
 #include "/opencv2/xfeatures2d.hpp"
          ^~~~~~~~~~~~~~~~~~~~~~~~~~

根据给的路径找到xfeature2d.hpp的文件并打开,找到” #include”/opencv2/xfeatures2d.hpp “如下:

40 #ifndef __OPENCV_XFEATURES2D_HPP__
41 #define __OPENCV_XFEATURES2D_HPP__

42 #include"/opencv2/xfeatures2d.hpp"

将其改为绝对路径

40 #ifndef __OPENCV_XFEATURES2D_HPP__
41 #define __OPENCV_XFEATURES2D_HPP__

42#include"home/pi/opencv/opencv_contrib3.4.0/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp"

提示缺少boostdesc_bgm.i 等文件的问题解决方案

报错如下:

/home/pi/opencv/opencv_contrib-4.0.0/modules/xfeatures2d/src/boostdesc.cpp fatal error: boostdesc_bgm.i没有那个文件或目录

解决方法:

在网上查找一番后,发现网上大都给出了解决方案,无非就是将以下文件:

boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_lbgm.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
vgg_generated_120.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_48.i
...

通过U盘拷贝到opencv_contrib/modules/xfeatures2d/src/目录下

附上百度云链接:https://pan.baidu.com/s/1BeYF8kqEZLAJYQj-MvxpmA

提取码:e1wc

解决 sudo ldconfig /sbin/ldconfig.real: xxx 不是符号连接 问题

有可能是在同一个目录下有两个重名(.so前面部分相同)的 .so 动态链接库,例如:

/usr/lib/libtest.so
/usr/lib/libtest.so.xxx

解决方法:

找个这两个库文件,删掉其中一个即可

fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory

原因是没找到这个文件

解决方法如下:

将/home/pi/opencv/opencv-4.0.0/ modules / features2d复制,然后粘贴到/home/pi/opencv/opencv-4.0.0/build目录中来解决该问题

Package opencv was not found in the pkg-config search path.问题

执行 pkg-config 时报错,如下:

ackage opencv was not found in the pkg-config search path.

Perhaps you should add the directory containing `opencv.pc' to the PKG_CONFIG_PATH environment variable

意思是在 PKG_CONFIG_PATH 环境变量中没有找到 opencv 的配置文件 &#x2018;opencv.pc&#x2019;,即 opencv 不在 pkg-config 的搜索路径,那什么是 pkg-config?什么是 PKG_CONFIG_PATH

pkg-config:

pkg-config 就是通过库提供的一个 .pc 文件获得库的各种必要信息的,包括版本信息、编译和连接需要的参数等。通过 pkg-config 提供的参数 &#x2013;cflags, &#x2013;libs,将所需信息提取出来供编译和连接使用。这样,不管库文件安装在哪,通过库对应的 .pc 文件就可以准确定位。

PKG_CONFIG_PATH

pkg-config 默认会搜索 /usr/lib/pkgconfig/usr/share/pkgconfig下的 .pc配置文件,若我们源码编译的库的路径不在 pkg-config 的默认搜索路径下,则可以通过环境变量 PKG_CONFIG_PATH 将自定义的路径添加到 pkg-config 的搜索路径。

export PKG_CONFIG_PATH = /your/path:$PKG_CONFIG_PATH

通过下面命令来查看已添加的环境变量:

echo $PKG_CONFIG_PATH

配置opencv.pc文件

如果在 /usr/local/lib/pkgconfig 路径下没有opencv.pc文件,那我们就创建一个,有的话就进行修改。

没有opencv.pc文件就执行以下命令:

cd /usr/local/lib
sudo mkdir pkgconfig && cd pkgconfig
sudo nano opencv.pc

prefix=/usr/local
exec_prefix=${prefix}
includedir=~/local/include
libdir=~/local/lib

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.0.0
Libs: -L${exec_prefix}/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir}

树莓派编译过程死机/卡死 如99%在cv2.cpp.0处

树莓派编译过程死机问题:

一种可能是没有在编译前增加交换空间CONF_SWAPSIZE=2048

另外一种就是很玄学,在编译的时候使用 sudo make -j4命令会卡在99%,改为 sudo make单线程编译解决了问题,不过时间会长一些。特别是在编译 cv2.cpp.0 和cv3时,我一度以为又卡死了,差一点终止了,所以在单线程 make 时要有耐心!

可以参考这篇博文:https://blog.csdn.net/lionwerson/article/details/105893952

fatal error: stdlib.h: 没有那个文件或目录 #include_next

cmake时加上参数-D ENABLE_PRECOMPILED_HEADERS=OFF

[ 76%] Linking CXX shared library …/…/lib/libopencv_ximgproc.so [ 76%] Built target opencv_ximgproc make: *** [Makefile:163:all] 错误 2

可以参考 https://stackoverflow.com/questions/26902541/opencv-compile-error-linking-cxx-shared-library-lib-libopencv-highgui-so

import cv2 报错 no modul name cv2 可参考

http://www.manongjc.com/article/26926.html

其他技术博文

修改树莓派交换分区 SWAP 的正确方法:https://shumeipai.nxez.com/2017/12/18/how-to-modify-raspberry-pi-swap-partition.html

Ubuntu 16.04 OpenCV 源码安装、自定义环境变量 PKG_CONFIG_PATH:https://zhuanlan.zhihu.com/p/85959787?from_voters_page=true

Original: https://blog.csdn.net/qq_42642142/article/details/112474678
Author: Small_Fish25
Title: 树莓派安装Opencv方法总结,包括各种报错解决方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/637008/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球