這裏編譯的是最新版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裏引入的庫拷貝到可執行文件所在目錄,不然運行程序會異常結束(由於找不到庫),若是沒有使用影子構建則能夠直接運行。
運行結果: