• Ubuntu 18.04 LTS中cmake-gui编译opencv-3.4.16并供Qt Creator调用


    一、安装opencv

    1.下载opencv-3.4.16的源码并解压
    2.在解压后的文件夹内新建文件夹build以及opencv_install
    3.安装cmake和cmake-gui

    sudo apt install cmake
    sudo apt-get install cmake-gui
    
    • 1
    • 2

    查看版本

    lyc@ubuntu:~$ cmake --version
    cmake version 3.10.2
    
    • 1
    • 2

    4.启动cmake-gui并设置

    sudo cmake-gui
    
    • 1

    (1)设置界面中source及build路径
    在这里插入图片描述
    (2)点击configure,选择第一个default项目,即默认本地编译器
    在这里插入图片描述
    (3)设置prefix,即安装路径
    之前我在默认路径/usr/local/下已经安装交叉编译结果opencv-3.4.16-gcc-arm
    这里我选择home文件夹
    在这里插入图片描述
    选择需要的库,我采用默认的。
    博文(https://blog.csdn.net/zhiyuan2021/article/details/131407526)给了两个建议:
    第一个建议是:在CMAKE_BUILD_TYPE 值处输入RELEASE,我查了一下,默认采用release方式编译,空着就行。
    第二个建议是:在OPENCV_EXTRA_MODULES_PATH中填写opencv_contrib的路径,但我在configure时报错,好像是名称重复。等后面需要的时候,我再编译opencv_contrib吧。这次保留为空,这样configure就可以通过了。
    在这里插入图片描述
    也就是说,我没有采用这两个建议。

    (4)依次点击configure, generate,之后关闭cmake-gui

    4.进入opencv-3.4.16内的build文件夹,cmake-gui已经在其中生成了编译中间文件
    执行:

    sudo make -j4
    
    • 1

    耐心等待结束!!!

    执行:

    sudo make install
    
    • 1

    完成opencv安装。
    注意:build文件夹不要删除,后期如果卸载本次安装的opencv-3.14.16,可以再次进入它并执行

    sudo make uninstall
    
    • 1

    5.设置 /etc/ld.so.conf.d/opencv.conf,否则在第二部分Qt Creator编译OpenCV程序环节会出现如下错误

    报错:
    …/lib/libopencv_core.so.3.4: cannot open shared object file: No such file or d…
    原因是之前用cmake对opencv-3.4.16进行了交叉编译(详见本人博客),并设置了opencv.conf。
    如果是首次安装opencv,需要在目录/etc/ld.so.conf.d/下建立opencv.conf,命令为

    touch opencv.conf
    
    • 1


    本地使用时的平台为x86_64,因此,需要修改 /etc/ld.so.conf.d/opencv.conf
    参考博文:https://blog.csdn.net/rong11417/article/details/103905794
    修改后的opencv.conf:
    在这里插入图片描述
    注意:交叉编译时,需要再改一下opencv.conf中的路径。

    记得加载操作

    sudo ldconfig
    
    • 1

    6.在系统或用户环境变量中设置PKG_CONFIG_PATH
    我设置的是用户变量

    打开
    gedit ~/.bash.rc
    添加
    PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv3.4.16/lib/pkgconfig
    export PKG_CONFIG_PATH
    使能
    source ~/.bash.rc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果设置系统环境变量,则需要以sudo命令打开/etc/bash.bashrc并添加:

    sudo gedit /etc/bash.bashrc 
    
    • 1

    二、Qt Creator运行opencv程序

    安装qt及qt creator详见本人博文。
    https://blog.csdn.net/lyc_daniel/article/details/133866784?spm=1001.2014.3001.5502

    1.qt creator建立纯c++工程
    在这里插入图片描述记得选择编译器为qmake,否则工程中不会存在.pro文件,后期为工程添加头文件和库的路径时麻烦!!!
    (坑:我之前选择了cmake,工程中存在CmakeLists.txt,我对它不熟,没有搞清楚如何添加路径。此外,网上大部分博文采用.pro文件的方式)
    在这里插入图片描述
    2.在main.cpp中写入opencv的程序
    在这里插入图片描述

    #include 
    
    using namespace std;
    #include "opencv2/core/core.hpp"
    #include "opencv2/opencv.hpp"
    using namespace cv;
    
    int main()
    {
        Mat img = imread("/home/lyc/gcc-arm-projects/opencvTest1017_V2/plane.jpg");
        imshow("plane", img);
        waitKey(0);
    
        //cout << "Hello World!" << endl;
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    注意:图片路径为绝对路径,之前用"plane.jpg"方式报imshow的width和height为0的错误,说明图片读取失败。

    3.在.pro文件中设置包含的头文件和库的路径
    在这里插入图片描述

    TEMPLATE = app
    CONFIG += console c++11
    CONFIG -= app_bundle
    CONFIG -= qt
    
    SOURCES += \
            main.cpp
    
    INCLUDEPATH += /home/lyc/Exe/opencv-3.4.16-for-x86_64/opencv_install/include \
                   /home/lyc/Exe/opencv-3.4.16-for-x86_64/opencv_install/include/opencv \
                   /home/lyc/Exe/opencv-3.4.16-for-x86_64/opencv_install/include/opencv2
    
    LIBS += /home/lyc/Exe/opencv-3.4.16-for-x86_64/opencv_install/lib/libopencv_*
    #LIBS += /home/lyc/Exe/opencv-3.4.16-for-x86_64/opencv_install/lib/lib*.so*
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3.编译、运行工程
    在这里插入图片描述
    得到显示的图像
    在这里插入图片描述至此,记录结束!!!

  • 相关阅读:
    rabbitMQ的知识点
    基于springboot+vue+MySQL的电影院会员管理系统
    JVM优化案例实战-手动模拟Young GC
    基于红外技术的交通灯设计
    psycopg2.pool.PoolError: connection pool exhausted
    Nginx部署Vue前端项目
    QT 中map的使用
    分布式多协议接入网关FluxMQ-2.0功能说明
    【matplotlib 实战】--箱型图
    HTML+CSS+JS实现【别踩鸡块】,ikun粉快来瞅瞅(含源码链接在文末+思路)
  • 原文地址:https://blog.csdn.net/lyc_daniel/article/details/133885904