qt調用opencv彙總(2)

OpenCV3.4.3+Qt5.9.4(QtCreator)開發環境搭建

之前有過對OpenCV3.4.2+VS2015編譯及環境搭建,今天使用OpenCV3.4.3+QtCreator5.9.4編譯及環境搭建。編譯過程比較曲折,大部分編譯錯誤都可以查得到解決方法,也遇到了Google無果的錯誤,好在最後還是解決了,特此記錄。

編譯環境

 

  • win10-64bit
  • Qt5.9.4
  • MinGW-5.3.0-32bit
  • CMake-3.12.1
  • OpenCV-3.4.3

相關軟件下載地址


Qt下載地址:http://download.qt.io/archive/qt/5.9/
CMake下載地址:https://cmake.org/download/
OpenCV下載地址:https://opencv.org/releases.html#


此處下載安裝包(Win pack)和源碼(Sources)均可,配置時選擇的目錄不同。


其它地址


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



添加環境變量

 

  • H:\cmake\bin
  • D:\Qt\Qt5.9.4\5.9.4\mingw53_32\bin
  • D:\Qt\Qt5.9.4\Tools\mingw530_32\bin

OpenCV編譯步驟


在opencv安裝的同級目錄下創建文件夾buildOpencv,用來存放構建文件及生成的庫。

è¿éåå¾çæè¿°

Qt官方編譯步驟文檔:https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows

編譯前配置


1、打開 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即可。

2、在彈窗裏設置編譯器目錄,然後點擊Finish:

D:\Qt\Qt5.9.4\Tools\mingw530_32\bin\gcc.exe
D:\Qt\Qt5.9.4\Tools\mingw530_32\bin\g++.exe


3、點擊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
  • FILEPATH
  • 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%)之後執行安裝命令,會在相關目錄下生成庫文件。

編譯錯誤


編譯過程中可能會遇到下面的錯誤:

  1. 多線程編譯錯誤,18%左右

è¿éåå¾çæè¿°

 

解決:改爲使用mingw32-make命令繼續編譯

  1. C++11錯誤,25%左右

 

è¿éåå¾çæè¿°

解決:打開 cmake-gui ,勾選 ENABLE_CXX11,然後重新Configure-Generate-mingw32-make

  1. 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

  1. cap_msmf.cpp文件出錯,43%左右

è¿éåå¾çæè¿°

解決:打開 cmake-gui ,不勾選WITH_MSMF,然後重新Configure-Generate-mingw32-make

生成的OpenCV庫


編譯完成後,生成的庫在H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin目錄下

è¿éåå¾çæè¿°


Qt+OpenCV測試


添加OpenCV庫到環境變量


添加 H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin到系統環境變量(Path)中

測試代碼


在.pro文件中添加頭文件路徑和庫路徑:

 
  1. INCLUDEPATH += H:\opencv3.4.3\buildOpencv\install\include

  2.  
  3. LIBS += H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_core343.dll \

  4.     H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_highgui343.dll \

  5.     H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_imgcodecs343.dll \

  6.     H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_imgproc343.dll \

  7.     H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_features2d343.dll \

  8.     H:\opencv3.4.3\buildOpencv\install\x86\mingw\bin\libopencv_calib3d343.dll


mainwindow.cpp:

 
  1. #include "mainwindow.h"

  2. #include "ui_mainwindow.h"

  3. #include <opencv2/core/core.hpp>

  4. #include <opencv2/highgui/highgui.hpp>

  5.  
  6.  
  7. MainWindow::MainWindow(QWidget *parent) :

  8.     QMainWindow(parent),

  9.     ui(new Ui::MainWindow)

  10. {

  11.     ui->setupUi(this);

  12.     // read an image,Mat是基礎圖像容器

  13.     cv::Mat image = cv::imread("H:/test_rec/qt.jpg", 1);

  14.     // create image window named "My Image"

  15.     cv::namedWindow("My Image");

  16.     // show the image on window

  17.     cv::imshow("My Image", image);

  18. }

  19.  
  20. MainWindow::~MainWindow()

  21. {

  22.     delete ui;

  23. }


注意:如果構建項目時使用影子構建(即構建目錄與項目目錄非同一目錄),則需要將.pro裏引入的庫拷貝到可執行文件所在目錄,否則運行程序會異常結束(因爲找不到庫),如果沒有使用影子構建則可以直接運行。

 

 

運行結果

 

 

Qt + OpenCV + Qt Creator環境配置

軟件版本:

系統:win7 64位

opencv:2.4.9

QT:5.10.1

QT creator:4.5.1

MinGW:5.3.0

CMake:3.11.1

 

第一步:安裝QT

首先,在QT官網下載QT,5版本的QT安裝包包含了MinGW、Qt Creator,直接下載安裝就行。需要注意的是在安裝過程中,QT有多個組件可選,例如MSVC版、安卓、ARM等,因爲我只需做PC端的機器視覺開發,同時考慮到和Linux上的兼容性,只選擇MinGW,Tools的話只選擇了Qt Creator,具體如下圖:

     

安裝完成後將qt和mingw文件夾下bin文件夾路徑添加進PATH變量。

第二步:安裝CMake

安裝很簡單,不多說。注意勾選添加進path變量

第三步:安裝opencv

第四步:利用MinGW GUI編譯opencv源碼,注意選WITH_QT,WITH_OPENGL,配置後對紅色部分做修改:         

 

    找到QT_QMAKE_EXECUTABLE,它的值填寫爲:C:/Qt/Qt5.3.1/5.3/mingw482_32/bin/qmake.exe

    找到QT_MKSPECS_DIR,它的值填寫爲:C:/Qt/Qt5.3.1/5.3/mingw482_32/mkspecs

    找到QT_QTCORE_LIBRARY_DEBUG,它的值填寫爲:C:/Qt/Qt5.3.1/5.3/mingw482_32/bin/Qt5Cored.dll

    找到QT_QTCORE_LIBRARY_RELEASE,它的值填寫爲C:/Qt/Qt5.3.1/5.3/mingw482_32/bin/Qt5Core.dll

    找到QT_QTCORE_INCLUDE_DIR,它的值填寫爲C:/Qt/Qt5.3.1/5.3/mingw482_32/include/QtCore/5.3.1/QtCore

 第五步:打開CMD,執行mingw32-make,然後執行mingw32-make install

最後:配置pro文件:

 

INCLUDEPATH += D:\opencv_mingw530\install\include
LIBS += -L D:\opencv_mingw530\install\x86\mingw\bin\libopencv_*.dll //(動態鏈接庫)
LIBS += -L D:\opencv_mingw\install\x86\mingw\lib\libopencv_*.a      //(靜態鏈接庫)


實例代碼:

#include <opencv2/opencv.hpp>
using namespace cv;
int main(void)
{
    VideoCapture capture(0);
    while(1)
{
Mat frame;
capture >> frame;
imshow("video", frame);
waitKey(30);
}
    return 0;
}

QT5.8+OpenCV3.2的安裝與配置

QT5.8+OpenCV3.2的安裝與配置(win7_X64+Qt_5.8.0+opencv_3.2.0)

一、安裝QT 5.8.0

安裝在: C:\Qt\Qt5.8.0
QT下載地址: http://download.qt-project.org/official_releases/
下載:qt-opensource-windows-x86-mingw530-5.8.0.exe

二、安裝opencv

OpenCV官網: http://opencv.org/
下載OpenCV 3.2.0
解壓至: E:\opencv3.2\opencv\

三、安裝cmake

從CMake下載cmake-3.8.0-win64-x64.msi

安裝至: C:\Program Files\CMake

CMake下載地址: http://www.cmake.org/cmake/resources/software.html

安裝CMake的的時候,注意安裝路徑不能有中文和空格, 在安裝過程中,勾選爲所有用戶加入到環境變量()

四、配置環境變量

主要是將C:\Qt\Qt5.8.0\Tools\mingw530_32\bin 添加到系統環境變量中。
1.生成Makefiles
打開CMake,配置源碼路徑和生成物的目標路徑:
源碼路徑: E:\opencv3.2\opencv\sources
目標路徑: F:\opencv3.2
點擊Configure,在彈出的框中選擇MinGW Makefiles ,並勾選 Specify native compilers.
接着配置C和C++編譯器路徑:
C: C:\Qt\Qt5.8.0\Tools\mingw530_32\bin\gcc.exe
C++: C:\Qt\Qt5.8.0\Tools\mingw530_32\bin\g++.exe​
點擊finish。這裏CMake會自動開始配置。
報錯
將value值分別修改爲:










C:/Qt/Qt5.8.0/5.8/mingw530_32/bin/qmake.exe

C:/Qt/Qt5.8.0/5.8/mingw530_32/lib/cmake/Qt5Concurrent

C:/Qt/Qt5.8.0/5.8/mingw530_32/lib/cmake/Qt5Core

C:/Qt/Qt5.8.0/5.8/mingw530_32/lib/cmake/Qt5Gui

C:/Qt/Qt5.8.0/5.8/mingw530_32/lib/cmake/Qt5Test

C:/Qt/Qt5.8.0/5.8/mingw530_32/lib/cmake/Qt5Widgets

然後勾選WITH_OPENGL和WITH_QT

再次報錯,將value值繼續修改爲
C:/Qt/Qt5.8.0/5.8/mingw530_32/lib/cmake/Qt5OpenGL
繼續點擊Configure,會有成功的提示。
點擊Generate,生成MakeFiles成功。​
2.編譯OpenCV
到 E:\opencv3.2\opencv\sources\cmake 下找到 OpenCVCompilerOptions.cmake
它並找到
add_extra_compiler_option(-Werror=non-virtual-dtor)
將它註釋掉,變成:







#add_extra_compiler_option(-Werror=non-virtual-dtor)
  •  

(以上這一步是爲了規避掉我在編譯過程中遇到的問題)
返回到:F:\opencv3.2在這個路徑下按住鍵盤的shift鍵,然後右鍵鼠標,打開cmd窗口,在命令行輸入 mingw32-make
這個過程比較久,大概30分鐘,因電腦而異。編譯完成。
然後輸入 mingw32-make install 進行安裝:
大約一分鐘後,安裝完成。
3.配置環境
A.找到路徑 : E:\opencv3.2\opencv\build\include
將include文件夾複製到一個自定義文件夾中
B.CMake目標路徑 下的bin文件夾
複製到上面的文件夾
C.CMake目標路徑 下的lib文件夾
同上複製
最後自定義文件夾中應該如下示:
然後將文件夾下的bin路徑添加到系統環境變量中。
到此QT Creator下的OpenCV開發環境已經配置好,剩下的就是測試是否配置成功。













五、測試

新建一個空的工程 OpenCV_Test.pro
在裏面添加:

INCLUDEPATH+=E:\opencvForQT\include
INCLUDEPATH+=E:\opencvForQT\include\opencv
INCLUDEPATH+=E:\opencvForQT\include\opencv2
LIBS += -L E:\opencvForQT\lib\libopencv_*.a

在mainwindow.h裏添加:

#include <opencv2/opencv.hpp>
using namespace cv;
//定義全局變量
cv::Mat image;
  •  

在mainwindow.cpp中添加button響應函數如下

void MainWindow::on_openImgPushButton_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"),
                                   ".",tr("Image Files (*.png *.jpg *.bmp)"));
       qDebug()<<"filenames:"<<fileName;//文件名不能有中文字
       //String str=fileName.toStdString();
       image = cv::imread(fileName.toStdString(),1);
       displayMat(image);//QLabel+QScrollarea顯示Mat圖像的函數,下一篇博文涉及
}

實現的效果爲:
QLabel+QScrollarea顯示Mat圖像

直接在QT creator中使用opencv

工具:

CMake:3.8.2
OpenCV:3.0.0(測試了下3.1.0與3.2.0也可以)
QT:5.8.0
MinGW:5.3.0
系統: WIndows 10



開始

1. OpenCV

下載完解壓到某一文件夾:
opencv3.0.0
2.CMake.
選擇source文件以及輸出的文件路徑。這裏的source文件就是下載opencv解壓後的文件路徑,而第二個build路徑可以自己選擇放在哪個文件夾裏。
這裏寫圖片描述
點擊config,選擇MinGW Makefiles,再點擊Specify native compilers。
這裏寫圖片描述
選擇編譯器的路徑,保持跟QT的編譯器一致就行了。
我的路徑爲:
E:\installation\QT\Tools\mingw530_32\bin\gcc.exe
E:\installation\QT\Tools\mingw530_32\bin\g++.exe
這裏寫圖片描述
CMake就會執行配置:
這裏寫圖片描述
遇到問題請看後面所列情況。
解決後會看到Configuring done。
這裏寫圖片描述
勾選WITH_OPENGL和WITH_QT,繼續config。
這裏寫圖片描述
還有紅色框框,確定路徑沒錯,繼續config。
這裏寫圖片描述
已經沒有紅色框框了,說明config完成,然後我們點擊Generate。
這裏寫圖片描述
我們可以看到CMake生成的文件:
這裏寫圖片描述
打開命令行,cd到改目錄下,輸入mingw32-make進行編譯
這裏寫圖片描述
編譯過程如下,這裏所用的時間會比較長,耐心等待:
這裏寫圖片描述
100%之後再輸入mingw32-make install。
這裏寫圖片描述
生成的文件都在install文件夾中:
這裏寫圖片描述































3.QT Creator
我們把對應的路徑(包含文件INCLUDE和庫目錄LIB)添加到QT工程的pro文件裏就可以使用opencv了。

INCLUDEPATH += G:\opencvTest\opencvTest300\install\include\
INCLUDEPATH += G:\opencvTest\opencvTest300\install\include\opencv\
INCLUDEPATH += G:\opencvTest\opencvTest300\install\include\opencv2\
LIBS += G:\opencvTest\opencvTest300\install\x86\mingw\lib\libopencv_*.a


這裏寫圖片描述
成功運行opencv測試代碼。
這裏寫圖片描述
**


可能遇到的一些問題:

**

  • 由於找不到libwinpthread-1.dll,無法繼續執行代碼。重新安裝程序可能會解決此問題。
    這個是因爲環境變量沒配,在系統環境變量的PATH中加上QT中mingw對應的目錄就行了。 比如我的路徑是(忘了是不是隻加第一個就可以,不過只加第二個會出錯):

    E:\installation\QT\5.8\mingw53_32\bin
    E:\installation\QT\Tools\mingw530_32\bin



這裏寫圖片描述

  • CMake Error at 3rdparty/ippicv/downloader.cmake:71 (file): file DOWNLOAD HASH mismatch
    我們手動下載對應文件替換掉目錄下的文件。
    比如我的ippicv_windows_20141027.zip出問題,則在網上下載一個新的壓縮包替換掉原來的壓縮包(我電腦上的路徑G:\opencvTest\opencv-3.0.0\3rdparty\ippicv\downloads\windows-b59f865d1ba16e8c84124e19d78eec57\ippicv_windows_20141027.zip)。原本3M+網上找了一個25M的替換掉就可以了。

  • CMake was unable to find a build program corresponding toXXX
    這裏寫圖片描述
    在CMAKE_MAKE_PEOGRAM中寫上mingw32-make.exe的路徑,我的路徑是E:/installation/QT/Tools/mingw530_32/bin/mingw32-make.exe

  • 出現問題

modules\python2\CMakeFiles\opencv_python2.dir\build.make:171: recipe
for target
‘modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.obj’
failed mingw32-make[2]: *
[modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.obj]
Error 1 CMakeFiles\Makefile2:7721: recipe for target
‘modules/python2/CMakeFiles/opencv_python2.dir/all’ failed
mingw32-make[1]: *
[modules/python2/CMakeFiles/opencv_python2.dir/all] Error 2
Makefile:150: recipe for target ‘all’ failed mingw32-make: * [all]
Error 2









解決方法:把CMake中的python選項去掉,有關路徑也刪掉。重新config和generate.

  • 找不到photo文件
    在CMake中勾選BUILD_opencv_photo重新config、generate、mingw32-make、mingw32-make install。

  • Qt 程序異常結束,並且crashed
    這個問題原因很多。
    這裏的原因是沒有在環境變量中添加編譯完的opencv目錄下mingw的bin目錄。
    ( 我的路徑:G:\opencvTest\opencvTest300\install\x86\mingw\bin)


 

 

原因:the windres.exe mingw uses cannot handle/escape “long long” given as a cmdline arg
解決方法:在cmake裏面找到OPENCV_ENABLE_ALLOCATOR_STATS或者在search裏面搜索,然後把後面的勾選去掉,接着Configure和Generate後,接着在cmd窗口中mingw32-make即可繼續編譯。

 

  • 使用cmake來自己編譯opencv

  • 一、先下載cmake:

    1. 登錄CMake官網,下載CMake安裝包。

     


      2. 雙擊下載的安裝包,安裝程序,會彈出如下界面,點擊“Next”按鈕,進入下一步

     


      3. 同意CMake的條款,點擊“Next”按鈕,進入到下一步

     


      4. 選中“Add CMake to the system PATH for the current user”,點擊“Next”按鈕。

     


      5. 修改安裝目錄。

     

     

     


      6. 點擊“Install”,CMake開始安裝,安裝完成後,點擊“Finish”按鈕。

     

     

     

     

     


    END

     

     


    二、使用CMake生成VS2013的OpenCV解決方案

     

     

     

     

     

    1. 直接在opencv的官網上下載opencv3.0,然後安裝會生成一個opencv3.0的文件。

    2.在OpenCV3.0目錄下新建目錄build,用於放置生成的解決方案和編譯好的庫。

     

     

     

     

      3. 打開CMake,在Where is the source code後面的文本框選擇OpenCV的源代碼,Where to build the binaries選擇第2步新建的文件夾build,如下圖所示:

     

      4. 點擊“Configure”按鈕,在彈出的對話框中,選擇“Visual Studio 12 Win64”,使用默認的本地編譯器,如下圖所示:(根據自己電腦裏面的vs來選)

     

     

     

    5. 點擊“Finish”之後,等待配置完成,如下圖所示:(如果電腦裏面沒有下載Cuda,則將勾選的Cuda選項設成否)

     

     

     

      6. 找到WITH_TBB,勾選:(該選項我這次編譯時沒有選擇,不過也沒有報錯)

     

     

     

    7.再次點擊“Configure”按鈕,配置完成出現紅色標記,修改TBB_INCLUDE_DIRS的Value爲:C:\OpenCVLatest\tbb42_20140122oss_win\tbb42_20140122oss\include

     

     

     

     

     

     8. 再次點擊“Configure”按鈕,會出現如下所示:

     

     

     

      9. 這個地方需要注意一下,因爲生成的Value值到intel64,這裏需要修改爲intel64/vc12,對應vs2013,如下圖所示:

     

     

     

     

     

     

     

     

     

    10. 再次點擊“Configure”按鈕,這時就沒有紅色標記出現了,點擊“Generate”按鈕,生成OpenCV的解決方案。

     

     

     

     

    END

     


    三、VS2013編譯OpenCV解決方案生成庫

    1.打開OpenCV的解決方案(在文件夾下面選擇OpenCV.sln文件),右擊CMakeTargets下的INSTALL,選擇“生成”,生成Debug版的dll和lib,如下圖所示:

     

     

     

     

      2. 修改配置爲“Release”,重複步驟1,生成Release版的dll和lib,如下圖所示:

     

     

     

    3. 生成完畢,在OpenCV解決方案下的install文件夾裏就有了dll,lib和h頭文件了。

     

     

     

      4. 雖然生成了庫文件了,如果可以Debug跟蹤源碼,還得保留OpenCV解決方案。

     

     

     

     

     

     

     


    在配置vs2013時,本人有遇到一點錯誤:
    錯誤 1 error C1083: 無法打開包括文件: “unistd.h”: No such file or directory:
    錯誤原因:沒有繼承vs2013中默認的庫,可以在屬性管理器->鏈接器->輸入->附加依賴項,中勾選從父級或項目默認設置繼承


     

     

     

    錯誤2   找不到Python27-d.lib,
    錯誤原因:Python中有一個頭文件調用了Python調用庫的Debug模式;
    http://blog.csdn.net/I_can_do_1098/article/details/54312117 可以參照這個博客,將Pythonconfig.h進行修改;

     


    最後,自己手動跟蹤opencv的代碼:
    1.先新建一個項目,再將opencv裏面的一個源代碼打開

     

     

     

    ,其中裏面的配置環境爲:

     


    再進行生成 ,調試成功即可。


    end

  • Win10下Qt+OpenCV+Cmake編譯錯誤記錄與解決【gcc: error: long: No such file or directory】

  • 環境:Window10
    Qt版本:5.9.5
    OpenCV版本:4.3.0
    安裝完Opencv、Qt和Cmake之後在cmd下通過mingw32-make編譯,結果出現錯誤,錯誤提示如下:


    [ 39%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/mean.avx2.cpp.obj
    [ 39%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/merge.avx2.cpp.obj
    [ 40%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/split.avx2.cpp.obj
    [ 40%] Building CXX object modules/core/CMakeFiles/opencv_core.dir/sum.avx2.cpp.obj
    [ 40%] Building RC object modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj
    gcc: error: long: No such file or directory
    C:\PROGRA~1\MINGW-~1\X86_64~1.0-P\mingw64\bin\windres.exe: preprocessing failed.
    mingw32-make[2]: *** [modules\core\CMakeFiles\opencv_core.dir\build.make:1492: modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1
    mingw32-make[2]: *** Waiting for unfinished jobs....
    mingw32-make[1]: *** [CMakeFiles\Makefile2:1844: modules/core/CMakeFiles/opencv_core.dir/all] Error 2
    mingw32-make: *** [Makefile:179: all] Error 2
    
  •  

Qt Creator5.12配置OpenCV4.3.0和opencv_contrib擴展包(親測有效)

本文結構

 

最終結果展示
在這裏插入圖片描述
筆者使用的版本如下
友情提示:這裏Opencv 和opencv_contrib版本需要一致,筆者踩過坑。


Win10 家庭版 64位
Qt Creator 5.12.2
Cmake 3.18.0
Opencv 4.3.0
opencv_contrib 4.3.0

第一部分 只安裝Qt Creator和配置OpenCV

1.Qt Creator5.12.2下載與安裝

以win10家庭版爲例進行下載和安裝
官方下載地址http://download.qt.io/archive/qt/5.12/5.12.2/下面有百度網盤安裝包,請往下看
選擇window版本
在這裏插入圖片描述


安裝包有點大3.7G,下載很慢,最終報錯,跳轉到迅雷下載成功
這裏給出筆者百度網盤安裝包window版本Qt 5.12.2

雙擊安裝包
在這裏插入圖片描述

這裏需要註冊qt賬戶
在這裏插入圖片描述

註冊成功後登錄
在這裏插入圖片描述
自定義安裝路徑,要求路徑不能含有空格

選擇組件
在這裏插入圖片描述
在這裏插入圖片描述

同意協議許可
在這裏插入圖片描述

點擊下一步
在這裏插入圖片描述
下一步進行安裝
在這裏插入圖片描述


安裝完成顯示如下
在這裏插入圖片描述
默認是打開Qt界面
在這裏插入圖片描述


2.Cmake下載與安裝

官網下載地址https://cmake.org/download/,目前最新的版本是Cmake3.18.0

在這裏插入圖片描述
安裝
在這裏插入圖片描述

筆者選擇瞭如下配置:配置全局變量和創建桌面快捷方式
在這裏插入圖片描述
更改安裝路徑
在這裏插入圖片描述
安裝完成
在這裏插入圖片描述




3.OpenCV下載

官方下載地址:https://opencv.org/releases/
目前最新版本是4.3.0
這裏選擇windows
在這裏插入圖片描述
下載完壓縮包名:opencv-4.3.0-vc14_vc15.exe
解壓完文件名:opencv
在這裏插入圖片描述





下面是將mingw加入環境變量
在這裏插入圖片描述

系統變量下找到PATH,點擊編輯,添加如下

D:\Qt5.12.2\Tools\mingw730_64\bin
  • 1

這是下載Qt時候的路徑,需要自己找到
在這裏插入圖片描述
根據知乎:PATH和path是一樣的,原因是:Windows系統對大小寫不敏感。

在這裏插入圖片描述

4.編譯OpenCV

根據安裝路徑,找到Cmake,點擊cmake.gui.exe
在這裏插入圖片描述
where is the source code
添加opencv的sources


D:/opencv/sources
  • 1

新建文件夾opencv-build
在這裏插入圖片描述

where to build the binaries

D:/opencv/opencv-build
  • 1

在這裏插入圖片描述
保持默認MinGW Makefiles,點擊Specify native compilers,再next
在這裏插入圖片描述

編譯器選擇:這裏自己的安裝路徑
C語言

D:/Qt5.12.2/Tools/mingw730_64/bin/gcc.exe
  • 1

C++

D:/Qt5.12.2/Tools/mingw730_64/bin/g++.exe
  • 1

Fortran不用填
在這裏插入圖片描述

需要下拉,選中下面這兩個WITH_OPENGL和WITH_QT
在這裏插入圖片描述

出現錯誤
在這裏插入圖片描述
錯誤信息
在這裏插入圖片描述


CMake Error at cmake/OpenCVFindLibsGUI.cmake:18 (find_package):
  Could not find a package configuration file provided by "Qt5" with any of
  the following names:

    Qt5Config.cmake
    qt5-config.cmake

  Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR"
  to a directory containing one of the above files.  If "Qt5" provides a
  separate development package or SDK, be sure it has been installed.
Call Stack (most recent call first):
  CMakeLists.txt:685 (include)


Configuring incomplete, errors occurred!

解決辦法
在Opencv文件夾sources底下,也就是上面配置source code 的地址:D:/opencv/sources
在CMakeLists.txt文件下添加,位置如圖所示

set (CMAKE_PREFIX_PATH "D:\\Qt5.12.2\\5.12.2\\mingw73_64\\")
  • 1

這裏是cmake配置opencv時候的編譯器選項位置
在這裏插入圖片描述
在這裏插入圖片描述
完成之後來到下面的界面
在這裏插入圖片描述



然後再次點擊configure,然後顯示configuring done
在這裏插入圖片描述

此時,可以選擇關閉Cmake,打開
where to build the binaries

D:/opencv/opencv-build
  • 1

可以看到如下生成的文件
在這裏插入圖片描述

鼠標放在該文件夾內,按住Shift鍵右擊鼠標,選擇在此處打開Powershell窗口
在這裏插入圖片描述
在Powershell中輸入

mingw32-make -j 8
  • 1

據參考博客的博主所言:這裏的-j 8是爲了讓CPU進行多任務處理,可以加快編譯速度

進行到40%發生錯誤(這是沒有添加opencv-contrib擴展庫時候的報錯)
在這裏插入圖片描述

gcc: error: long: No such file or directory
D:\Qt5.12.2\Tools\mingw730_64\bin\windres.exe: preprocessing failed.
mingw32-make[2]: *** [modules\core\CMakeFiles\opencv_core.dir\build.make:1495: modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1
mingw32-make[2]: *** Waiting for unfinished jobs....
mingw32-make[1]: *** [CMakeFiles\Makefile2:1889: modules/core/CMakeFiles/opencv_core.dir/all] Error 2
mingw32-make: *** [Makefile:182: all] Error 2
PS D:\opencv\opencv-build>

解決辦法
在stackoverflow上面看到同樣的問題https://stackoverflow.com/questions/61707195/error-building-opencv-with-mingw-qt-windows

打開我們新建的opencv-build文件下該路徑

D:\opencv\opencv-build\modules\core\CMakeFiles\opencv_core.dir
  • 1

在這裏插入圖片描述
打開flags.make,然後把RC-DEFINES(下面劃線部分)替換掉
在這裏插入圖片描述
替換代碼(注:cmake每configure和generate之後都需要更改這個文件)


RC_DEFINES = -DCVAPI_EXPORTS -D_USE_MATH_DEFINES -D_WIN32_WINNT=0x0601 -D__OPENCV_BUILD=1 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS

最終編譯完成
在這裏插入圖片描述

100%之後輸入

mingw32-make install

完成之後退出

現在需要將以下路徑添加環境變量

D:\opencv\opencv-build\install\x64\mingw\bin

在這裏插入圖片描述

5.測試Qt程序

新建project
在這裏插入圖片描述
選擇默認的項目Application-Qt Widgets Application
在這裏插入圖片描述


項目命名和位置:注意這裏不能有中文路徑,下面是錯誤的示範,後面筆者又新建項目,重新改成英文的路徑,否則會報錯
在這裏插入圖片描述
默認下一步
在這裏插入圖片描述
繼續下一步





點擊完成
在這裏插入圖片描述

在test.pro文件該位置添加如下代碼

注意不要寫成這種形式:

//這是錯誤的代碼
INCLUDEPATH += D:\opencv\opencv-build\install\include
LIBS += D:\opencv\opencv-build\lib\

正確的代碼

INCLUDEPATH += D:\opencv\opencv-build\install\include
LIBS += D:\opencv\opencv-build\lib\libopencv_*.a

在這裏插入圖片描述
在mainwindow.cpp文件下添加相應的包,添加代碼如下

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/xfeatures2d.hpp>
using namespace cv;
 Mat image=imread("D:\\m1521\\Pictures\\Saved Pictures\\cute-2528119.jpg",1);
    namedWindow( "Display window", WINDOW_AUTOSIZE );
    imshow("Display window", image );

在這裏插入圖片描述

點擊左下角的錘子,進行構建
在這裏插入圖片描述
會顯示正確的信息如下

01:55:07: 爲項目test執行步驟 ...
01:55:07: 配置沒有改變, 跳過 qmake 步驟。
01:55:07: 正在啓動 "D:\Qt5.12.2\Tools\mingw730_64\bin\mingw32-make.exe" -j8

D:/Qt5.12.2/Tools/mingw730_64/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'D:/m1521/Documents/Qt_opencv/test/build-test-Desktop_Qt_5_12_2_MinGW_64_bit-Debug'
mingw32-make[1]: Nothing to be done for 'first'.
mingw32-make[1]: Leaving directory 'D:/m1521/Documents/Qt_opencv/test/build-test-Desktop_Qt_5_12_2_MinGW_64_bit-Debug'
01:55:08: 進程"D:\Qt5.12.2\Tools\mingw730_64\bin\mingw32-make.exe"正常退出。
01:55:08: Elapsed time: 00:01.

點擊綠色的箭頭運行
在這裏插入圖片描述
測試結果
顯示出圖片
在這裏插入圖片描述



至此,Qt5配置OpenCV安裝配置完成!

第二部分 配置opencv_contrib擴展庫

該部分在第一部分的基礎上,配置opencv_contrib,本文結構這樣安排的目的在於:第一,筆者先是安裝了qt和opencv,當時沒想到要使用opencv_contrib擴展庫,也就是說這是筆者真實的安裝過程;第二,基於對讀者的換位思考。經過上面第一部分的配置工作,讀者可能初步產生配置成功的喜悅,以更好的狀態進入到擴展庫的部分。

6.添加opencv_contrib擴展庫

1.下載opencv擴展庫,下載地址opencv_contrib全部版本下載地址

選擇版本4.3.0
解壓完:
在這裏插入圖片描述

2.編譯的事前準備
打開路徑:在D:\opencv\sources\cmake下面找到OpenCVCompilerOptions.cmake文件,打開它並找到add_extra_compiler_option(-Werror=non-virtual-dtor),
將其註釋掉,如:
#add_extra_compiler_option(-Werror=non-virtual-dtor)
(這一步,筆者不知道是幹嘛所用)
這一步參考該篇博文:qt5(mingw版) opencv3.0(含contrib擴展)配置詳解
在這裏插入圖片描述
由於是後面補充的contrib擴展庫,打開Cmake,在第一部分配置成功後選中下面這個NONFREE
在這裏插入圖片描述







再搜索path,找到OPENCV-EXTRA-MODULES_PATH,配置value,找到解壓後的擴展庫,路徑到modules文件,這裏配置value
在這裏插入圖片描述

下面便可以點擊generate,顯示generating done
每次generate之後都要經過第4步修改flags.make 文件,請參考第4步
(如果電腦沒有安裝cuda,請去掉勾選BUILD_CUDA_STUBS,否則會找不到cuda從而報錯)

然後generate(下面這是錯誤的圖,因爲未去掉BUILD_CUDA_STUBS)
在這裏插入圖片描述

然後開始重複上面沒有配置opencv_contrib的步驟4:編譯OpenCV
在Powershell中輸入

mingw32-make -j 8

在26%遇到問題
在這裏插入圖片描述

[ 26%] Building CXX object modules/ml/CMakeFiles/opencv_ml.dir/src/em.cpp.obj
[ 26%] Building CXX object modules/imgproc/CMakeFiles/opencv_imgproc.dir/src/approx.cpp.obj
[ 26%] Building CXX object modules/ml/CMakeFiles/opencv_ml.dir/src/gbt.cpp.obj
[ 26%] Building CXX object modules/imgproc/CMakeFiles/opencv_imgproc.dir/src/bilateral_filter.dispatch.cpp.obj
[ 26%] Building CXX object modules/cudaarithm/CMakeFiles/opencv_cudaarithm.dir/src/lut.cpp.obj
In file included from D:\opencv_contrib-4.3.0\opencv_contrib-4.3.0\modules\cudaarithm\src\lut.cpp:7:0:
D:\opencv_contrib-4.3.0\opencv_contrib-4.3.0\modules\cudaarithm\src\lut.hpp:10:10: fatal error: cuda_runtime.h: No such file or directory
 #include <cuda_runtime.h>
          ^~~~~~~~~~~~~~~~
compilation terminated.
mingw32-make[2]: *** [modules\cudaarithm\CMakeFiles\opencv_cudaarithm.dir\build.make:125: modules/cudaarithm/CMakeFiles/opencv_cudaarithm.dir/src/lut.cpp.obj] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:4335: modules/cudaarithm/CMakeFiles/opencv_cudaarithm.dir/all] Error 2
mingw32-make[1]: *** Waiting for unfinished jobs...

這個問題的解決需要去掉勾選BUILD_CUDA_STUBS
在這裏插入圖片描述

後面遇到錯誤
在這裏插入圖片描述

error: 'GL_RENDERBUFFER_EXT' was not declared in this scope
     glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, fbo_depth);

解決辦法:如果出現dynafu.cpp的錯誤,BUILD_opencv_rgbd與WITH_OPENGL只能勾選其一
去掉勾選BUILD_opencv_rgbd
在這裏插入圖片描述

還發現這樣的錯誤


[ 56%] [ 56%] Scanning dependencies of target opencv_aruco
Building CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/boostdesc.cpp.objBuilding CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/brief.cpp.obj

[ 56%] Building CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/daisy.cpp.obj
[ 56%] [ 56%] Building CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/ellipticKeyPoint.cpp.objBuilding CXX object modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/fast.cpp.obj

[ 58%] Built target opencv_bioinspired
[ 58%] Built target opencv_ximgproc
Scanning dependencies of target opencv_ccalib
Scanning dependencies of target opencv_dnn_objdetect
D:\opencv_contrib-3.4\opencv_contrib-3.4\modules\xfeatures2d\src\boostdesc.cpp:654:20: fatal error: boostdesc_bgm.i: No such file or directory
           #include "boostdesc_bgm.i"
                    ^~~~~~~~~~~~~~~~~
compilation terminated.
mingw32-make[2]: *** [modules\xfeatures2d\CMakeFiles\opencv_xfeatures2d.dir\build.make:102: modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/boostdesc.cpp.obj] Error 1
mingw32-make[2]: *** Waiting for unfinished jobs....

按照這個教程下載zip包,解壓之後

安裝OpenCV時提示缺少boostdesc_bgm.i文件的問題解決方案(附帶百度雲資源)

在這個路徑內複製

D:\opencv_contrib-4.3.0\opencv_contrib-4.3.0\modules\xfeatures2d\src

結果跑到88%還是有錯誤
在這裏插入圖片描述

 fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory
 #include "features2d/test/test_detectors_regression.impl.hpp"

此處bug參考:樹莓派4的opencv4.1.0–python3.7的開發環境安裝
我們回到opencv4.3.0文件夾下複製下面兩個文件到報錯的路徑下
在這裏插入圖片描述

複製到如下路徑(總共需要複製5個hpp文件

D:\opencv_contrib-4.3.0\opencv_contrib-4.3.0\modules\xfeatures2d\test
  • 1

在這裏插入圖片描述

修改test_features2d.cpp文件(具體修改哪個文件,需要查看報錯的位置,哪個文件引用)
修改之前

#include "features2d/test/test_detectors_regression.impl.hpp"
#include "features2d/test/test_descriptors_regression.impl.hpp"

修改之後

#include "test_detectors_regression.impl.hpp"
#include "test_descriptors_regression.impl.hpp"
  • 1
  • 2

發現成功一處,還有一處錯誤
在這裏插入圖片描述
打開test_rotation_and_scale_invariance.cpp文件
修改前
在這裏插入圖片描述



修改後

#include "test_detectors_invariance.impl.hpp" // main OpenCV repo
#include "test_descriptors_invariance.impl.hpp" // main OpenCV repo

在這裏插入圖片描述
還有錯誤
在這裏插入圖片描述

同樣的步驟,把相應的文件複製過來,結果100%成功
在這裏插入圖片描述

100%之後輸入

mingw32-make install
  • 1

完成之後退出

7.測試使用opencv擴展庫的Qt程序

請參考第5步:測試Qt程序
這裏只是在配置了opencv_contrib之後,引入頭文件#include <opencv2/xfeatures2d.hpp>
在mainwindow.cpp文件下添加相應的包,添加代碼如下

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/xfeatures2d.hpp>
using namespace cv;
 Mat image=imread("D:\\m1521\\Pictures\\Saved Pictures\\cute-2528119.jpg",1);
    namedWindow( "Display window", WINDOW_AUTOSIZE );
    imshow("Display window", image );
  •  

在這裏插入圖片描述

在這裏插入圖片描述

到這裏:完整的Qt Creator5.12+OpenCV4.3.0+opencv_contrib4.3.0配置就完成了!

8.本文使用的軟件百度網盤下載

鏈接:https://pan.baidu.com/s/1_gRt_bHAjKq6tRlKgF8FLQ
提取碼:4qmo
附上編譯後的文件夾opencv-build
在這裏插入圖片描述
參考博客:
兩個博客都有用
[1]【Qt5.12】Qt5.12安裝教程
[2]win10系統Qt5.12配置OpenCV4.0.1庫教程暨Qt,OpenCV,Cmake詳細下載安裝教程(史上最全!)






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章