热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

QtOpenCV使用CMake和MinGW的编译安装及其在Qt配置运行IriczhaoLive2D

Qt-OpenCV使用CMake和MinGW的编译安装及其在Qt配置运行版权声明:本文为CSDN博主「辉哈」的原创文章,遵循CC4.0by-sa版权协议,转载请附上原文出处链接及本

Qt-OpenCV使用CMake和MinGW的编译安装及其在Qt配置运行


版权声明:本文为CSDN博主「辉哈」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/huihut/article/details/78701814

 


OpenCV使用CMake和MinGW的编译安装及其在Qt配置运行



前言

本篇博文是使用 32 位的 MinGW 在 Windows 下编译 OpenCV 生成 32 位的 dll。

关于使用 64 位的 MinGW 编译 OpenCV 生成 64 位的 dll,见:OpenCV使用CMake和MinGW-w64的编译安装



软件环境



  • Windows-10-64bit

  • Qt-5.9.3

  • MinGW-5.3.0-32bit

  • CMake-3.9.2

  • OpenCV-3.3.1 / 3.4.1 / 3.4.5 (适用)



OpenCV 的 MSVC 版及 MinGW 版



MSVC 版

下载的 OpenCV 文件夹会有:



  • build (已编译好的库)

  • sources (源码)

使用 MSVC 的话,直接在路径:build/x64/vc14里面就有了,配置好路径就可以使用。



MinGW 版

OpenCV 没有为我们编译好 MinGW 版,所以我们只能自己编译,下面就是介绍 MinGW 版的编译流程。

也可以直接下载使用我编译好了的 OpenCV (在上文)。



安装及配置 Qt、MinGW、CMake



安装

CMake 自行安装,Qt 和 MinGW 可以直接使用qt-opensource-windows-x86-5.9.3.exe 安装包安装,注意选择安装的组件(components)的时候勾选 MinGW :



  • Qt-Qt5.9-MingGW 5.3.0 32 bit

  • Qt-Tools-MinGW 5.3.0



配置 Qt、MinGW

安装好后打开 QtCreator,在工具-选项-构建和运行-构建套件,选中Desktop Qt 5.9.3 MinGW 32bit,设为默认,OK。



添加 MinGW 到环境变量

为用户变量 Path 添加 E:\Qt\Qt5.9.3\Tools\mingw530_32\bin



使环境变量生效

打开命令提示符 CMD,运行 set PATH=C:,更改当前窗口任务的环境变量,关闭这个 CMD。

再次打开另一个 CMD,运行 echo %PATH%,显示最新的环境变量,会发现刚刚添加的 MinGW 环境变量已经生效。



使用 CMake 生成 OpenCV 的 Makefile

打开 cmake-gui,设置源码和生成路径:



  • Where is the source code: E:/OpenCV_3.3.1/opencv/sources

  • Where to build the binaries: E:/OpenCV_3.3.1/opencv-build

点击 Configure,设置编译器



  • Specify the generator for this project: MinGW Makefiles

  • Specify native compilers

  • Next

  • Compilers C: E:\Qt\Qt5.9.3\Tools\mingw530_32\bin\gcc.exe

  • Compilers C++: E:\Qt\Qt5.9.3\Tools\mingw530_32\bin\g++.exe

  • Finish

编译配置:



  • 勾选 WITH_QT

  • 勾选 WITH_OPENGL

点击 Configure,再次配置:



  • 不勾选 WITH_IPP

  • 设置 QT_MAKE_EXECUTABLEE:\Qt\Qt5.9.3\5.9.3\mingw53_32\bin\qmake.exe

  • 设置 Qt5Concurrent_DIRE:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Concurrent

  • 设置 Qt5Core_DIRE:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Core

  • 设置 Qt5Gui_DIRE:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Gui

  • 设置 Qt5Test_DIRE:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Test

  • 设置 Qt5Widgets_DIRE:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Widgets

  • 设置 Qt5OpenGL_DIRE:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5OpenGL

  • 设置 CMAKE_BUILD_TYPERelease 或者 RelWithDebInfo

点击 Generate 生成 Makefile


编译 OpenCV

打开终端进行编译:(-j 是使用 8 个线程进行编译,请根据你的计算机配置合理设置线程数)

E:
cd E:\OpenCV_3.3.1\opencv-build
mingw32-make -j 8
mingw32-make install

 

如果 mingw32-make -j 8 遇到错误,请看下面的 编译 OpenCV 常见错误,否则执行 mingw32-make install,完成安装。
编译 OpenCV 常见错误
0. 多线程编译错误信息不明确
表现

如果使用了多线程编译,导致错误,但是错误信息不明确,如:

Makefile:161: recipe for target \'all\' failed
mingw32-make: *** [all] Error 2

解决

使用单线程编译:

mingw32-make

以查看详细的错误提示,再根据具体情况解决。
1. RC 错误
表现

... windres.exe: unknown option -- W ...
或者
FORMAT is one of rc, res, or coff, and is deduced from the file name
extension if not specified.  A single file name is an input file.
No input-file is stdin, default rc.  No output-file is stdout, default rc.

 解决

在 cmake-gui 编译配置中:

    不勾选 ENABLE_PRECOMPILED_HEADERS

然后重新Configure-Generate-mingw32-make
2. sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA 错误
表现

...opencv/sources/modules/videoio/src/cap_dshow.cpp...
... \'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA\' was not declared in this scope ...
或者
Makefile:161: recipe for target \'all\' failed
mingw32-make: *** [all] Error 2

解决

修改E:\OpenCV_3.3.1\opencv\sources\modules\videoio\src\cap_dshow.cpp文件,在#include "DShow.h"这行的上面加一行#define NO_DSHOW_STRSAFE,如:

#define NO_DSHOW_STRSAFE
#include "DShow.h"
然后重新Configure-Generate-mingw32-make
3. identifier ‘nullptr’ is a keyword in C++11 错误【2018年3月2日编译OpenCV 3.4.1时遇到并解决】
表现

D:\opencv-3.4.1\opencv-3.4.1\3rdparty\protobuf\src\google\protobuf\stubs\io_win32.cc:94:3: warning: identifier \'nullptr\' is a keyword in C++11 [-Wc++0x-compat]
return s == nullptr || *s == 0;
^
D:\opencv-3.4.1\opencv-3.4.1\3rdparty\protobuf\src\google\protobuf\stubs\io_win32.cc: In function \'bool google::protobuf::internal::win32::{anonymous}::null_or_empty(const char_type*)\':
D:\opencv-3.4.1\opencv-3.4.1\3rdparty\protobuf\src\google\protobuf\stubs\io_win32.cc:94:15: error: \'nullptr\' was not declared in this scope
return s == nullptr || *s == 0;
^
3rdparty\protobuf\CMakeFiles\libprotobuf.dir\build.make:412: recipe for target \'3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/stubs/io_win32.cc.obj\' failed
mingw32-make[2]: *** [3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/stubs/io_win32.cc.obj] Error 1
CMakeFiles\Makefile2:710: recipe for target \'3rdparty/protobuf/CMakeFiles/libprotobuf.dir/all\' failed
mingw32-make[1]: *** [3rdparty/protobuf/CMakeFiles/libprotobuf.dir/all] Error 2
Makefile:161: recipe for target \'all\' failed
mingw32-make: *** [all] Error 2
MakeOpenCV_nullptr_Error

解决

在 cmake-gui 编译配置中:

    勾选 ENABLE_CXX11

然后重新Configure-Generate-mingw32-make
添加 OpenCV 编译的库到环境变量

    为系统变量 Path 添加 E:\OpenCV_3.3.1\opencv-build\install\x86\mingw\bin

新建 OpenCV 的 Qt 项目

在 .pro 文件里面添加:

win32 {
INCLUDEPATH += E:\OpenCV_3.3.1\opencv-build\install\include
LIBS += E:\OpenCV_3.3.1\opencv-build\install\x86\mingw\bin\libopencv_*.dll
}

 
或者:(区分 debug 和 release 是因为 OpenCV 对其两者有不同的库,你需要把路径改为你自己的,我编译 MinGW 的 OpenCV 只有 release 库)

win32 {
INCLUDEPATH += E:\OpenCV_3.3.1\opencv-build\install\include
CONFIG(debug, debug|release): {
LIBS += E:\OpenCV_3.3.1\opencv-build\install\x86\mingw\bin\libopencv_*d.dll
} else:CONFIG(release, debug|release): {
LIBS += -LE:\OpenCV_3.3.1\opencv-build\install\x86\mingw\bin \
-llibopencv_core331 \
-llibopencv_highgui331 \
-llibopencv_imgcodecs331 \
-llibopencv_imgproc331 \
-llibopencv_features2d331 \
-llibopencv_calib3d331
}
}

然后在 MainWindow 中如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// read an image
cv::Mat image = cv::imread("E:/Pictures/H_white.png", 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;
}

最后运行起来了,效果如图:
 


官方教程



  • How to setup Qt and openCV on Windows



推荐阅读
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • Howtobuilda./configure&&make&&makeins ... [详细]
  • 32位ubuntu编译android studio,32位Ubuntu编译Android 4.0.4问题
    问题一:在32位Ubuntu12.04上编译Android4.0.4源码时,出现了关于emulator的错误,关键是其Makefile里的 ... [详细]
  • 第2讲 Android Camera Native Framework 初识cameraserver进程
    本讲是AndroidCameraNativeFramework专题的第2讲,我们初识CameraServer,包括如下内容:Camera ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • 第四讲ApacheLAMP服务器基本配置Apache的编译安装从Apache的官方网站下载源码包:http:httpd.apache.orgdownload.cgi今 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • 三、查看Linux版本查看系统版本信息的命令:lsb_release-a[root@localhost~]#lsb_release-aLSBVersion::co ... [详细]
  • linux 字符串数组初始化,C++字符数组初始化方法的分析
    发现了一个字符数组初始化的误区,而这个往往能导致比较严重的性能问题,分析介绍如下:往往我们在初始化一个字符数组,大概有如下几 ... [详细]
  • c语言翁恺28讲,翁恺的c语言视频怎么样
    本文目录一览:1、翁凯的c语言视频多长时间2、 ... [详细]
  • linux下编译安装lnmp
    2019独角兽企业重金招聘Python工程师标准#######################安装依赖#####################安装必要的包:y ... [详细]
author-avatar
林x强
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有