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

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

OpenCV使用CMake和MinGW的编译安装及其在Qt配置运行
前言
本篇博文是使用 32 位的 MinGW 在 Windows 下编译 OpenCV 生成 32 位的 dll。c++

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

软件环境
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里面就有了,配置好路径就可使用。ide

MinGW 版
OpenCV 没有为咱们编译好 MinGW 版,因此咱们只能本身编译,下面就是介绍 MinGW 版的编译流程。工具

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

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

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。google

添加 MinGW 到环境变量
为用户变量 Path 添加 E:\Qt\Qt5.9.3\Tools\mingw530_32\binspa

使环境变量生效
打开命令提示符 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_EXECUTABLE 为 E:\Qt\Qt5.9.3\5.9.3\mingw53_32\bin\qmake.exe
设置 Qt5Concurrent_DIR 为 E:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Concurrent
设置 Qt5Core_DIR 为 E:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Core
设置 Qt5Gui_DIR 为 E:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Gui
设置 Qt5Test_DIR 为 E:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Test
设置 Qt5Widgets_DIR 为 E:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5Widgets
设置 Qt5OpenGL_DIR 为 E:\Qt\Qt5.9.3\5.9.3\mingw53_32\lib\cmake\Qt5OpenGL
设置 CMAKE_BUILD_TYPE 为 Release 或者 RelWithDebInfo
点击 Generate 生成 Makefile

OpenCVCMakeGenerate

编译 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 <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
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;
}

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用\[1\]:collect2.exe: error: ld returned 1 exit status mingw32-make\[2\]: *** \[modules\core\CMakeFiles\opencv_core.dir\build.make:1800: bin/libopencv_core451.dll\] Error 1 mingw32-make\[1\]: *** \[CMakeFiles\Makefile2:1794: modules/core/CMakeFiles/opencv_core.dir/all\] Error 2 mingw32-make: *** \[Makefile:165: all\] Error 2 。 引用\[2\]:mingw32-make\[2\]: *** \[modules\python2\CMakeFiles\opencv_python2.dir\build.make:76: modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.obj\] Error 1 mingw32-make\[1\]: *** \[CMakeFiles\Makefile2:3365: modules/python2/CMakeFiles/opencv_python2.dir/all\] Error 2 mingw32-make: *** \[Makefile:165: all\] Error 2 。 引用\[3\]:问题:gcc: error: long: No such file or directory** C:\PROGRA~2\Dev-Cpp\MinGW64\bin\windres.exe: preprocessing failed. modules\core\CMakeFiles\opencv_core.dir\build.make:1420: recipe for target ‘modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj’ failed mingw32-make\[2\]: *** \[modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj\] Error 1 mingw32-make\[2\]: *** Waiting for unfinished jobs… CMakeFiles\Makefile2:1603: recipe for target ‘modules/core/CMakeFiles/opencv_core.dir/all’ failed mingw32-make\[1\]: *** \[modules/core/CMakeFiles/opencv_core.dir/all\] Error 2 。 问题:qtOpencv4 cmakemingw32-make: *** \[Makefile:165: all\] Error 2 回答: 这些错误信息表明在使用Qt中的Opencv4进行cmake时出现了问题。具体来说,出现了ld returned 1 exit status、Error 1、Error 2等错误。这些错误通常是由于编译器无法找到所需的文件或目录导致的。可能的原因包括缺少依赖项、路径设置错误或编译配置问题。为了解决这些错误,您可以尝试以下几个步骤: 1. 确保您已正确安装Opencv4和Qt,并且它们的路径已正确设置。 2. 检查您的编译配置是否正确,包括编译器版本和路径设置。 3. 检查您的项目配置文件是否正确,包括CMakeLists.txt文件中的路径和依赖项设置。 4. 确保您的系统中已安装所需的依赖项,并且它们的路径正确。 5. 尝试清理并重新构建您的项目,以确保所有文件和依赖项都正确配置。 如果您仍然遇到问题,建议您查阅Opencv4和Qt的官方文档,以获取更详细的指导和解决方案。 #### 引用[.reference_title] - *1* *2* [Qt5.14+Opencv4.1+CMake3.22配置](https://blog.csdn.net/qq_45792470/article/details/125774264)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [OpenCV使用CMakeMinGW-w64的编译安装](https://blog.csdn.net/qq_61604164/article/details/121731875)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值