最近想学习的两样东西,Qt和OpenCV,之前都有短暂使用过,但是用的不多。本文从环境搭建开始写起。
本文使用的软件版本及下载地址
Windows7_ultimate_x64
Qt 5.11.1 官方下载地址
CMake 3.12.1 官方下载地址
OpenCV 3.4.3 官方下载地址
Qt
Qt在安装过程中需要选择编译器,本文使用C++作为开发语言,编译器可以选择MinGW或者MSVC,MSVC需要安装相应版本的Visual Studio作为支持,本文选择MinGW,在安装时要勾选相应版本的MinGW。
CMake
OpenCV是使用c/c++编写的,官方网站提供的版本Qt不能直接使用,需要使用CMake重新编译Qt可用的版本。安装时注意勾选“Add CMake to the system PATH for all users”。
OpenCV
安装直接运行就可以。安装完成后开始进行编译。
添加MinGW环境变量
在Path下增加MinGW的路径(根据自己的Qt安装路径有所不同,添加环境变量时注意用 ; 分隔),配置完成需要重启电脑才能生效。
C:\Qt\Qt5.11.1\5.11.1\mingw53_32\bin
C:\Qt\Qt5.11.1\Tools\mingw530_32\bin
编译OpenCV
运行cmake-gui.exe,分别选择OpenCV的源码路径和编译输出路径
点击Configure,进行配置如下,然后next
配置编译器路径,然后finish
C: C:/Qt/Qt5.11.1/Tools/mingw530_32/bin/gcc.exe
C++: C:/Qt/Qt5.11.1/Tools/mingw530_32/bin/g++.exe
第一次configure完成后,勾选 WITH_QT 和 WITH_OPENGL,再次点击configure
第二次configure完成后, 将CMAKE_BUILD_TYPE修改为 Release,再次点击configure
第三次configure完成后,点击generate,生成结束后,打开cmd,进入编译输出目录,执行编译指令(-j 表示多线程工作,电脑是几核的CPU,后面的参数就可以设为多少,可以节省编译时间)
d:
cd OpenCV
cd build-Qt
mingw32-make -j 4
mingw32-make install
编译过程中如果遇到类似这样的错误
... windres.exe: unknown option -- W ...
可以在配置Cmake时将 ENABLE_PRECOMPILED_HEADERS 关闭,重新进行编译。
编译过程中如果遇到类似这样的错误
'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' was not declared in this scope
可以修改OpenCV的源文件,在cap_dshow.cpp文件中搜索
#include "DShow.h"
在这行代码前增加
#define NO_DSHOW_STRSAFE
然后重新编译可以解决。
编译过程中如果遇到类似这样的错误
using invalid field '{anonymous}::ComPtr<T>::p'
可以在Cmake配置中,将 WITH_MSFS 关闭,然后重新编译可以解决。
编译过程中如果遇到类似这样的错误
‘nullptr’ was not declared in this scope
可以在Cmake配置中,将 ENABLE_CXX11 打开,然后重新编译可以解决。
编译成功后,将编译生成的库添加到系统环境变量中,在Path中增加(根据自己的编译路径)
D:\OpenCV\build-Qt\install\x86\mingw\bin
测试Qt+OpenCV环境
新建一个QWindow项目,名为TestOpenCV,修改项目配置文件TestOpenCV.pro,在文件末尾增加文件包含路径及所需库文件
INCLUDEPATH += D:\OpenCV\build\include
LIBS += D:\OpenCV\build-Qt\bin\libopencv_core343.dll
LIBS += D:\OpenCV\build-Qt\bin\libopencv_highgui343.dll
LIBS += D:\OpenCV\build-Qt\bin\libopencv_imgcodecs343.dll
LIBS += D:\OpenCV\build-Qt\bin\libopencv_imgproc343.dll
LIBS += D:\OpenCV\build-Qt\bin\libopencv_features2d343.dll
LIBS += D:\OpenCV\build-Qt\bin\libopencv_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
cv::Mat image = cv::imread("d://1.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;
}
运行成功后环境搭建成功。