zoukankan      html  css  js  c++  java
  • Qt之CMake和MinGW编译OpenCV

    这里编译的是最新版OpenCV3.4.3,编译过程比较曲折,大部分编译错误都可以查得到解决方法,也遇到了Google无果的错误,好在最后还是解决了,特此记录。 编译环境

    win10-64bit Qt5.9.4 MinGW-5.3.0-32bit CMake-3.12.1 OpenCV-3.4.3

    相关软件下载地址

    Qt下载地址:http://download.qt.io/archive/qt/5.9/

    CMake下载地址:https://cmake.org/download/

    OpenCV下载地址:https://opencv.org/releases.html#
    这里写图片描述

    此处下载安装包(Win pack)和源码(Sources)均可,配置时选择的目录不同。
    这里写图片描述

    其它地址
    OpenCV官网:https://opencv.org/
    OpenCV官方教程:https://docs.opencv.org/3.4/d9/df8/tutorial_root.html
    速查表:https://docs.opencv.org/3.0-last-rst/opencv_cheatsheet.pdf

    添加环境变量

    • H:cmakein

    • D:QtQt5.9.45.9.4mingw53_32in

    • D:QtQt5.9.4Toolsmingw530_32in

    • OpenCV编译步骤

      在opencv安装的同级目录下创建文件夹buildOpencv,用来存放构建文件及生成的库。 这里写图片描述

    编译前配置 1、打开 cmake-gui,设置源码和生成路径:

    Where is the source code :H:opencv3.4.3opencvsources    (opencv安装目录) Where to build the binaries:H:opencv3.4.3uildOpencv    (新建的文件目录)

    然后点击Configure,在弹框里选择编译器,点击Next,如下图:

    这里写图片描述

    如果下载的是opencv源码而非安装包,解压后里面没有sources目录,上图第一项设置Where is the source code :H:opencv3opencv-3.4.3即可。

    2、在弹窗里设置编译器目录,然后点击Finish

    • D:QtQt5.9.4Toolsmingw530_32ingcc.exe
    • D:QtQt5.9.4Toolsmingw530_32ing++.exe

    这里写图片描述

    3、点击Finish之后需要等待一段时间,等到进度条读完之后,开始配置:

    • 勾选 WITH_QT
    • 勾选 WITH_OPENGL(默认已勾选)

    这里写图片描述

    勾选之后点击Configure,等到进度条读完之后,再次配置:

    Qt5Concurrent_DIR  --> D:QtQt5.9.45.9.4mingw53_32libcmakeQt5Concurrent
    Qt5Core_DIR           -->  D:QtQt5.9.45.9.4mingw53_32libcmakeQt5Core
    Qt5Gui_DIR             --> D:QtQt5.9.45.9.4mingw53_32libcmakeQt5Gui

    Qt5Test_DIR            --> D:QtQt5.9.45.9.4mingw53_32libcmakeQt5Test
    Qt5Widgets_DIR      --> D:QtQt5.9.45.9.4mingw53_32libcmakeQt5Widgets
    Qt5OpenGL_DIR     -->  D:QtQt5.9.45.9.4mingw53_32libcmakeQt5OpenGL 
    CMAKE_BUILD_TYPE -->  ***Release***(设置为Release后编译完成只会生成release库,需要debug库的话等到编译完成将此处更改为Debug,重新执行下面的步骤则会在生成的release库的目录下生成debug库)

    点击右上角的Add Entry,然后在弹窗中输入:

    • QT_MAKE_EXECUTABLE
    • FILEPATH
    • D:QtQt5.9.45.9.4mingw53_32inqmake.exe

    这里写图片描述

    然后点击OK- Generate ,进度条读完之后,配置完成。

    更多配置提示

    上一步已经配置完成,但是编译过程中会遇到编译错误,如果希望一次编译成功,可以进行下面的设置。或者直接在上一步Generate之后就进行编译,等到编译出现错误时再来配置。

    不勾选 WITH_IPP

    不勾选与TESTS有关的选项

    不勾选 ENABLE_PRECOMPILED_HEADERS

    不勾选WITH_MSMF

    勾选 ENABLE_CXX11

    编辑H:opencv3.4.3opencvsourcesmodulesvideoiosrccap_dshow.cpp文件,在约110行左右#include "DShow.h"上面添加#define NO_DSHOW_STRSAFE,#define STRSAFE_NO_DEPRECATE,如下图:
    这里写图片描述

    编译命令

    在构建目录buildOpencv下按shift+右键,打开终端,然后执行编译命令:

    mingw32-make 或 mingw32-make -j 8

    注意:右侧带参数的命令是多线程编译,编译速度会快很多,但是使用多线程编译前最好先重启电脑或者关闭不必要的软件保证内存和

    CPU的占用较低状态,否则很有可能编译失败,编译失败的话也没关系可以改为单线程继续编译。

    mingw32-make install

    编译完成(100%)之后执行安装命令,会在相关目录下生成库文件。

    编译错误

    编译过程中可能会遇到下面的错误:

    多线程编译错误,18%左右
    这里写图片描述
    解决:改为使用mingw32-make命令继续编译

    C++11错误,25%左右
    这里写图片描述
    解决:打开 cmake-gui ,勾选 ENABLE_CXX11,然后重新Configure-Generate-mingw32-make

    cap_dshow.cpp文件出错,43%左右
    这里写图片描述

    解决:
    编辑H:opencv3.4.3opencvsourcesmodulesvideoiosrccap_dshow.cpp文件,在约110行左右#include "DShow.h"上面添加#define NO_DSHOW_STRSAFE,然后重新Configure-Generate-mingw32-make。编译debug版本出现该错误时在cap_dshow.cpp文件中添加#define STRSAFE_NO_DEPRECATE
    cap_msmf.cpp文件出错,43%左右
    这里写图片描述
    解决:打开 cmake-gui ,不勾选WITH_MSMF,然后重新Configure-Generate-mingw32-make

    生成的OpenCV库

    编译完成后,生成的库在H:opencv3.4.3uildOpencvinstallx86mingwin目录下
    这里写图片描述

    Qt+OpenCV测试

    添加OpenCV库到环境变量

    添加 H:opencv3.4.3uildOpencvinstallx86mingwin到系统环境变量(Path)中

    测试代码 在.pro文件中添加头文件路径和库路径: INCLUDEPATH += H:opencv3.4.3uildOpencvinstallinclude

    LIBS += H:opencv3.4.3uildOpencvinstallx86mingwinlibopencv_core343.dll    

    H:opencv3.4.3uildOpencvinstallx86mingwinlibopencv_highgui343.dll    

    H:opencv3.4.3uildOpencvinstallx86mingwinlibopencv_imgcodecs343.dll    

    H:opencv3.4.3uildOpencvinstallx86mingwinlibopencv_imgproc343.dll   

      H:opencv3.4.3uildOpencvinstallx86mingwinlibopencv_features2d343.dll    

    H:opencv3.4.3uildOpencvinstallx86mingwinlibopencv_calib3d343.dll

    mainwindow.cpp:

    include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        // read an image,Mat是基础图像容器
        cv::Mat image = cv::imread("H:/test_rec/qt.jpg", 1);
        // create image window named "My Image"
        cv::namedWindow("My Image");
        // show the image on window
        cv::imshow("My Image", image);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }

    注意:如果构建项目时使用影子构建(即构建目录与项目目录非同一目录),则需要将.pro里引入的库拷贝到可执行文件所在目录,否则运行程序会异常结束(因为找不到库),如果没有使用影子构建则可以直接运行。
    这里写图片描述

    运行结果:
    这里写图片描述

    ---------------------
    作者:画茧自缚
    来源:CSDN
    原文:https://blog.csdn.net/zbw1185/article/details/82469496
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    mybatis动态sql中的两个内置参数(_parameter和_databaseId)
    Vue.js项目部署在Tomcat服务器上
    Vue2.0 + ElementUI的+ PageHelper实现的表格分页
    mybatis中使用mysql的模糊查询字符串拼接(like)
    C++循环链表解决约瑟夫环问题
    Nginx源码分析-ngx_module_s结构体
    设计模式(一)工厂模式Factory(创建型)(转)
    网络编程--套接字选项(一)
    Linux阵列 RAID详解 (转)
    HDFS RAID实现方案(转)
  • 原文地址:https://www.cnblogs.com/tansuoxinweilai/p/10464060.html
Copyright © 2011-2022 走看看