CMake设置源文件以及目标文件:
选择MinGW Makefiles,选择Specify native compilers,进入下一步
C:选择gcc
路径:E:\software\Qt6.4.3\Qt_6.4.3\Tools\mingw1120_64\bin\gcc.exe
C++:选择g++
路径:E:\software\Qt6.4.3\Qt_6.4.3\Tools\mingw1120_64\bin\g++.exe
Fortran:空白,
点击Finish
通过GitHub Proxy 代理加速下载以下ffmpeg文件(ffmpeg_version.cmake、opencv_videoio_ffmpeg.dll、opencv_videoio_ffmpeg_64.dll)
将以下三个文件添加到两个文件夹下:
E:\software\opencv_4.7.0\sources\3rdparty\ffmpeg
E:\software\opencv_4.7.0\opencv_qt_6.4.3\3rdparty\ffmpeg
编译问题1:
解决方法:去掉勾选以下三个值
编译问题2:
解决方法:查找OPENCV_GENERATE_SETUPVARS ,去掉勾选值
继续...
查找WITH_QT,WITH_OPENGL,完成勾选
Configure,设置以下路径
点击Generate 生成 Makefile
查找CMAKE_MAKE_PROGRAM
配置路径E:\software\Qt6.4.3\Qt_6.4.3\Tools\mingw1120_64\bin\mingw32-make.exe
再次 Configure,没有报错,Generate,done...
在目标文件夹中,按住shift,同时右键,选择 在此处打开Powershell窗口(s)
进入Windows Powershell ,输入mingw32-make -j 16(16为线程数),开始编译
开始等待,会有各种error......
以下常见问题以及解决方法:
问题1:Makefile:161: recipe for target 'all' failed
方法:采用单线程编译 mingw32-make 以查看详细的错误提示,再根据具体情况解决。
问题2:
[modules\core\CMakeFiles\opencv_core.dir\build.make:401:modules/core/CMakeFiles/opencv_core.dir/src/directx.cpp.obj] Error 1
[CMakeFiles\Makefile2:1995: modules/core/CMakeFiles/opencv_core.dir/all] Error 2
方法:在CMake中取消勾选WITH_OPENCL_D3D11_NV选项,重新Configure-Generate
问题3:
[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
方法:在CMake查找勾选ENABLE_CXX11,重新Configure-Generate
问题4:
make:90: recipe for target '3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/arena.cc.obj' failed [3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/arena.cc.obj] Error 1 CMakeFiles\Makefile2:1727: recipe for target '3rdparty/protobuf/CMakeFiles/libprotobuf.dir/all' failed mingw32-make[1]: * [3rdparty/protobuf/CMakeFiles/libprotobuf.dir/all] Error 2
方法:在CMake取消勾选BUILD_PROTOBUF和WITH_PROTOBUF,重新Configure-Generate
问题5:
Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.obj
error: '::hypot' has not been declared using ::hypot;
方法:在CMake中查找,取消勾选BUILD_opencv_python3、BUILD_opencv_python3_bindings_generator,重新Configure-Generate
若不使用opencv_python,则在CMake中取消勾选BUILD_opencv_python、opencv_python等选项
等待编译完成,编译100%完成之后,输入 mingw32-make install 完成安装
安装完成
添加环境变量:
E:\software\opencv_4.7.0\opencv_qt_6.4.3\install\x64\mingw\bin
所有环境变量:
WIN+R打开命令提示符,输入CMD,运行set Path=C,更改当前窗口任务的环境变量
再打开一个终端窗口,输入echo %PATH,查看Path是否更新
测试:
新建项目,在pro中,添加
INCLUDEPATH += E:\software\opencv_4.7.0\opencv_qt_6.4.3\install\include
LIBS += E:\software\opencv_4.7.0\opencv_qt_6.4.3\install\x64\mingw\bin\libopencv_*.dll
源文件mainwindow.cpp中:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->setupUi(this);
Mat image = imread("K:\\Qt\\qt_opencv\\test\\20230523_1.jpg", 1); //一定使用绝对路径,双反斜
namedWindow("Test",WINDOW_NORMAL);
imshow("Test", image);
waitKey(100000);
}
MainWindow::~MainWindow()
{
delete ui;
}
测试结果:
约~~