1. 程式人生 > >Qt5.9.1配置OpenCV3.4錯誤及解決辦法(mingw32)

Qt5.9.1配置OpenCV3.4錯誤及解決辦法(mingw32)

在用cmake編譯opencv3.4.1出現了不少錯誤,用的編譯器是mingw,報過幾種錯誤,現將其整理如下:

配置Qt與opencv可以參考官方文件: qt with opencv

1. 官方文件中提到的取消勾選ENABLE_PRECOMPILED_HEADERS和報錯資訊:

'sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' was not declared in this scope ,在 #include "DShow.h" 之前新增#define NO_DSHOW_STRSAFE;

2.網上提到的error: base class 'struct IUnknown' has accessible non-virtual destructor [-Werror=non-virtual-dtor]

到sources目錄下搜尋OpenCVCompilerOptions.cmake,將裡面的add_extra_compiler_option(-Werror=non-virtual-dtor註釋掉

如果你嘗試了各種方法均無果,那麼請直接從這開始:

在編譯二進位制檔案的路徑下進行mingw32-make報錯,採用的解決辦法是,直接下載opencv3.4的sources壓縮包,之前都是下載opencv-3.4.0-vc14_vc15這種格式的可執行檔案進行提取,vc編譯器和mingw32還是有一定的差異的,嘗試各種解決辦法都是到42%,48%,72%報錯失敗,直接在cmake中填上sources解壓好的檔案路徑,以及一個build-opencv路徑,和官網提示的類似,記住該路徑即可,至於編譯器選擇gcc和g++前面的官方文件已詳細介紹,值得注意的是這樣編譯還是會在48%左右報錯,但解決辦法就是官網提供的兩個,將ENABLE_PRECOMPILED_HEADERS取消勾選以及在cap_dshow.cpp中新增#define NO_DSHOW_STRSAFE即可,這次就順利到了97%...,報錯的內容是python部分,由於個人opencv for python是直接用pip安裝的,所以這裡就沒有再去配置opencv for python,報錯的資訊是error: '::hypot' has not been declared using ::hypot,這個的解決辦法是在cv2.cpp中#include <Python.h>之前加上#include <cmath.h>

                                           

這樣做完之後進行後續的ming32-make install等建立一個顯示圖片的示例,發現在#include <opencv2/core/core.hpp>找不到路徑,回去檢視sources解壓路徑下的include資料夾中opencv和opencv2內的標頭檔案只有兩三個,解決辦法,下載3.4的可執行檔案提取裡面的include資料夾中的opencv和opencv2(真香)到方才只有兩三個標頭檔案的include資料夾中,複製-覆蓋-完成,編譯執行均通過。

總結

opencv c++配置各種問題很常見,尤其是對mingw編譯器,如果你也遇到這些問題,多點耐心,嘗試多種解決辦法

,為了解決這問題,試過了4次下載opencv,還有網上報錯各種各樣,還是建議你如果用mingw還是不要直接下載opencv的可執行檔案提取,直接下載sources壓縮包進行編譯,出錯率極大降低,還有就是新版本慎用,早一個版本,一來網上資源要多一些,二來你不知道會不會出現你是首批遇到這些問題的人。