这里编译的是最新版OpenCV3.4.3,编译过程比较曲折,大部分编译错误均可以查获得解决方法,也遇到了Google无果的错误,好在最后仍是解决了,特此记录。 编译环境html
win10-64bit Qt5.9.4 MinGW-5.3.0-32bit CMake-3.12.1 OpenCV-3.4.3多线程
相关软件下载地址ide
Qt下载地址:http://download.qt.io/archive/qt/5.9/测试
CMake下载地址:https://cmake.org/download/ui
OpenCV下载地址:https://opencv.org/releases.html#this
此处下载安装包(Win pack)和源码(Sources)都可,配置时选择的目录不一样。spa
其它地址
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.net
H:\cmake\bin
线程
D:\Qt\Qt5.9.4\5.9.4\mingw53_32\bin
debug
D:\Qt\Qt5.9.4\Tools\mingw530_32\bin
在opencv安装的同级目录下建立文件夹buildOpencv
,用来存放构建文件及生成的库。
编译前配置 一、打开 cmake-gui,设置源码和生成路径:
Where is the source code :H:\opencv3.4.3\opencv\sources (opencv安装目录) Where to build the binaries:H:\opencv3.4.3\buildOpencv (新建的文件目录)
而后点击Configure
,在弹框里选择编译器,点击Next
,以下图:
若是下载的是opencv源码而非安装包,解压后里面没有sources目录,上图第一项设置Where is the source code :H:\opencv3\opencv-3.4.3
便可。
二、在弹窗里设置编译器目录,而后点击Finish
:
D:\Qt\Qt5.9.4\Tools\mingw530_32\bin\gcc.exe
D:\Qt\Qt5.9.4\Tools\mingw530_32\bin\g++.exe
三、点击Finish以后须要等待一段时间,等到进度条读完以后,开始配置:
WITH_QT
WITH_OPENGL(默认已勾选)
勾选以后点击Configure,等到进度条读完以后,再次配置:
Qt5Concurrent_DIR --> D:\Qt\Qt5.9.4\5.9.4\mingw53_32\lib\cmake\Qt5Concurrent
Qt5Core_DIR --> D:\Qt\Qt5.9.4\5.9.4\mingw53_32\lib\cmake\Qt5Core
Qt5Gui_DIR --> D:\Qt\Qt5.9.4\5.9.4\mingw53_32\lib\cmake\Qt5Gui
Qt5Test_DIR --> D:\Qt\Qt5.9.4\5.9.4\mingw53_32\lib\cmake\Qt5Test
Qt5Widgets_DIR --> D:\Qt\Qt5.9.4\5.9.4\mingw53_32\lib\cmake\Qt5Widgets
Qt5OpenGL_DIR --> D:\Qt\Qt5.9.4\5.9.4\mingw53_32\lib\cmake\Qt5OpenGL
CMAKE_BUILD_TYPE --> ***Release
***(设置为Release后编译完成只会生成release库,须要debug库的话等到编译完成将此处更改成Debug,从新执行下面的步骤则会在生成的release库的目录下生成debug库)
点击右上角的Add Entry
,而后在弹窗中输入:
QT_MAKE_EXECUTABLE
D:\Qt\Qt5.9.4\5.9.4\mingw53_32\bin\qmake.exe
而后点击OK- Generate
,进度条读完以后,配置完成。
上一步已经配置完成,可是编译过程当中会遇到编译错误,若是但愿一次编译成功,能够进行下面的设置。或者直接在上一步Generate以后就进行编译,等到编译出现错误时再来配置。
不勾选 WITH_IPP
不勾选与TESTS有关的选项
不勾选 ENABLE_PRECOMPILED_HEADERS
不勾选WITH_MSMF
勾选 ENABLE_CXX11
编辑H:\opencv3.4.3\opencv\sources\modules\videoio\src\cap_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.3\opencv\sources\modules\videoio\src\cap_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
编译完成后,生成的库在H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin
目录下
添加 H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin
到系统环境变量(Path)中
测试代码 在.pro文件中添加头文件路径和库路径: INCLUDEPATH += H:\opencv3.4.3\buildOpencv\install\include
LIBS += H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_core343.dll \
H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_highgui343.dll \
H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_imgcodecs343.dll \
H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_imgproc343.dll \
H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_features2d343.dll \
H:\opencv3.4.3\buildOpencv\install\x86\mingw\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,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里引入的库拷贝到可执行文件所在目录,不然运行程序会异常结束(由于找不到库),若是没有使用影子构建则能够直接运行。
运行结果: