树莓派安装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就可以。

      下载完成之后解压,注意路径中不能有中文字符,避免在使用镜像写入工具时出错。

    2. 格式化内存卡
      准备一个16GB或者以上的内存卡,在我的电脑右键–管理–磁盘管理,查看是否只有一个分区,应该是只有一个分区,且为FAT32.

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

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

    拓展树莓派的文件系统

    1. 在树莓派终端(或者SSH)上输入:$ sudo raspi-config

    2. 然后选择“高级选项”菜单项,选择第7个

    3. 然后选择“扩展文件系统”

      选择第一个回车,会让你重启树莓派,选择立即重启

      注:如果不能重启,则输入sudo reboot重启

    4. 重新启动后,文件系统已经扩展为包括micro-SD卡上的所有空间。可以通过执行df -h 检查输出来验证磁盘是否已扩展。

      已经释放掉所有内存 容量变成15G!Over!

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

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

    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
      
    3. 先按键盘上的ctrl+o,再按回车保存,再按ctrl+x退出 nano 编辑器回到命令行界面。再输入sudo apt-get update命令更新到清华大学/中国科技大学镜像源最新的软件列表。

    4. 今后在树莓派命令行中执行sudo apt-get install 软件名时便会自动从清华/中科大开源软件镜像站高速下载

    5. 最好再重启一下树莓派sudo reboot

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

    给树莓派增加交换空间SWAP

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

    1. 输入sudo nano /etc/dphys-swapfile打开 / etc / dphys – swapfile文件

    2. 然后编辑 CONF_SWAPSIZE 变量为2048或1024:

    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 
      
    2. 安装常用图像工具包:使我们可以从磁盘加载各种图像文件格式

    3. 输入如下命令安装jpeg格式图像工具包

      sudo apt-get install libjpeg8-dev 
      
    4. 输入如下命令安装tif格式图像工具包

      sudo apt-get install libtiff5-dev 
      
    5. 安装JPEG-2000图像包

      sudo apt-get install libjasper-dev 
      
    6. 安装png图像工具包

      sudo apt-get install libpng12-dev
      
    7. 安装常用视频库:使我们从磁盘读取各种视频文件格式,以及直接使用视频流

    8. sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
      sudo apt-get install libxvidcore-dev libx264-dev
      
    9. 安装GTK2.0

    10. sudo apt-get install libgtk2.0-dev
      
    11. 安装数值函数优化包

    12. sudo apt-get install libatlas-base-dev gfortran
      
    13. 装Python 2.7和Python 3头文件,这样我们就可以使用Python绑定编译OpenCV

    14. 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:电脑上进入该网页https://github.com/Itseez/opencv/archive/4.0.0.zip下载后通过U盘拷贝到树莓派

  • 下载OpenCV_contrib-4.0.0

    方法1:树莓派终端输入命令 wget -O opencv_contrib-4.0.0.zip https://github.com/Itseez/opencv_contrib/archive/4.0.0.zip

    方法2:电脑上进入该网页https://github.com/Itseez/opencv_contrib/archive/4.0.0.zip下载后通过U盘拷贝到树莓派

  • 解压Opencv-4.0.0和OpenCV_contrib-4.0.0

    unzip opencv-4.0.0.zip
    unzip opencv_contrib-4.0.0.zip
    
  • 配置CMake编译OPencv环境

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

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

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

    4. mkdir build
      
    5. 进入 build 文件夹

    6. cd ./build
      

    设置CMake编译参数,安装目录默认为 /usr/local

    首先进入build 文件夹cd /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
  • 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 ..
    

    注:想要C语言的例程的话,在最后一行前加参数INSTALL_C_EXAMPLES=ON

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

    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
    

    帮大家翻译下 ^ ^:

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

    配置完成后如下:

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

    cd ..
    cp -r build ./build1
    

    编译OpenCV

    1. 编译

      输入命令sudo make -j4 2>&1 | tee make.log开始编译

      注意:

      ​ 以管理员身份,否则容易出错

      ​ make命令参数-j4指允许make使用最多4个线程进行编译,这样编译速度会更快!但是如果没有增加交换空间的话就老老实实只用make

      ​ 使用tee命令可以将编译过程中终端显示的信息保存到make.log文件中,便于查看,这样即使VNC断线,终端的* 信息太多看不到,也 可以通过make.log文件查看编译过程。

      如果有幸一次就看到进度编译到100%,那么恭喜你是天选之子,说明编译安装成功。如果没有的话,那也很正常,文章末尾总结了许多可能出现的问题。

    1. 安装

      输入sudo make install开始安装

    2. 更新动态链接库

      输入sudo ldconfig 注意:是 L 的小写 l 而不是 i 的大写哦

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

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

    sudo nano /etc/dphys-swapfile
    

    修改CONF_SWAPSIZE=100

    重启交换服务

    sudo /etc/init.d/dphys-swapfile stop
    sudo /etc/init.d/dphys-swapfile start
    

    安装就结束了,可以删除之前的源代码包,释放空间

    rm -rf opencv-4.1.0 opencv_contrib-4.1.0

    配置Opencv

    配置opencv.conf

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

    sudo nano /etc/ld.so.conf.d/opencv.conf
    

    在文件末尾加入如下内容,并保存推出

     /usr/local/lib
     ?
    

    如图所示:

    输入如下命令,更新下ldconfig

    sudo ldconfig
    

    bash.bashrc 配置文件

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

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

    PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig       
    export PKG_CONFIG_PATH
    

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

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

    echo $PKG_CONFIG_PATH
    

    实例测试

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

    sudo apt-get install cmake-gui
    

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

    #include<opencv2/opencv.hpp>
    #include<opencv2/highgui.hpp>
    #include<iostream>
    
    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);
        /*
        threshold(gray,dst,0,255,THRESH_OTSU);//THRESH_OTSU:  自动设定合适阈值
        imshow("out",dst);
        */
        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;
    }
    
    /*
    THRESH_BINARY     :       0
    THRESH_BINARY_INV :       1
    THRESH_TRUNC      :       2
    THRESH_TOZERO     :       3
    THRESH_TOZERO_INV :       4
    */
    
    void Threshold_Demo(int , void *)
    {
        threshold(gray,dst,Threshold_size,Threshold_max,Thres_type);
        imshow("out",dst);
    }
    

    图片 abc.jpg

    将 .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文件夹。如图所示:

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

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

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

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

    问题汇总

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

    解决方法:

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

    sudo apt-get install aptitude

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

    sudo aptitude install 软件名

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

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

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

    问题原因:

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

    解决方法:

    ​ 使用命令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 的配置文件 ‘opencv.pc’,即 opencv 不在 pkg-config 的搜索路径,那什么是 pkg-config?什么是 PKG_CONFIG_PATH

    pkg-config:

    pkg-config 就是通过库提供的一个 .pc 文件获得库的各种必要信息的,包括版本信息、编译和连接需要的参数等。通过 pkg-config 提供的参数–cflags, –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
    
    # 在 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 <stdlib.h>

    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

    来源:Small_Fish25

    物联沃分享整理
    物联沃-IOTWORD物联网 » 树莓派安装Opencv方法总结,包括各种报错解决方法

    发表评论