2015-09-25 142 views
0

我跟着this tutorial安裝OpenCV與Qt一起工作。 幾年前,我在Qt之前使用過OpenCV,而且我必須自己構建OpenCV和Qt。我現在很高興通過構建OpenCV解決方案。OpenCV 3似乎不能與Qt

CMake像往常一樣有很多錯誤。我不得不禁用一堆附加功能,比如opencv_apps和examples,但是它正確地構建了這些庫。 動態庫不工作,但我打算靜態地使用它。

#include <opencv.hpp> 

// ... 

cv::Mat image = cv::imread("testimage.png"); 
cv::namedWindow("Test image"); 
cv::imshow("Test image", image); 
cv::waitKey(1000); 

它沒有:

連接在Qt的OpenCV的庫,而不是忘記了圖像的開放已經移動到「imgcodecs」

LIBS += -lopencv_core300 -lopencv_highgui300 -lopencv_imgproc300 
LIBS += -lopencv_imgcodecs300 

我想一個簡單的程序後,工作。

matrix.cpp:-1: error: undefined reference to `[email protected]'

搜索在谷歌「ippicviSum」返回絕對沒有(當然,直到這個問題會被他們抓取)。

我知道,圖書館至少有些工作,或者至少發現,因爲如果我從項目文件中刪除lopencv_imgcodecs300,我得到一個額外的錯誤,這是不存在的時候被列入該庫:

error: undefined reference to `cv::imread(cv::String const&, int)'


我放棄了對C++ API,並試圖用經典的C API。 (在我的試驗2年前,C++ API也有一些問題 - 基本開放和顯示工作,但更復雜的算法給出鏈接錯誤,所以我使出了C API,它工作正常)

#include <cv.h> 
#include <cvaux.h> 
#include <cvwimage.h> 
#include <cxcore.h> 
#include <highgui.h> 

// ... 

IplImage *image = cvLoadImage("testimage.png"); 

其結果是:

loadsave.cpp:-1: error: undefined reference to `cv::String::deallocate()'

回答

0

的問題似乎是,OpenCV的3.0與附帶的Qt MinGW的版本(491)不兼容5.4。

升級到使用mingw 492的Qt 5.5解決了這個問題。

2

「ippicviSum_8u_C1R」是,現在配備了OpenCV進行免費的英特爾性能基元(IPP)庫。看起來你錯過了下載,我通常從源代碼構建opencv,但是如果你有安裝程序,你可能需要單獨獲取英特爾庫。

沒有必要使用cv :: String類型,只需使用常規的std :: string即可。 cv類型可以支持舊的嵌入式平臺和過時的C++編譯器。一些Qt宏可能重新定義了「String」並破壞了代碼?

編輯:問題可能還在於您正在使用傳統的C api。 而不是做:

cv::Mat image = cv::imread("testimage.png");

,或者如果你仍然有一個問題,

cv::Mat image = cv::imread(std::string("testimage.png"));

+0

謝謝,我會試試看。我從官方網頁下載了OpenCV作爲安裝程序,但由於二進制文件無法與Qt一起使用,並且安裝包中有源代碼,因此我使用該源代碼來構建它。 – vsz

+0

關於'cv :: String':我怎麼不**使用它?我沒有具體包含它,似乎一個簡單的字符串文字被編譯爲'cv :: String'。 – vsz

+0

關於你上次的編輯:請看我的第一個例子。我首先使用了新的API,只有在它沒有工作之後,我才嘗試使用C API。從以前的經驗來看,它始終是C API在C++ API遇到問題的情況下工作的。 (我會嘗試一個僅用於源代碼的下載,並檢查該源代碼是否與包含二進制文件的下載內容不同,如果是,那麼我將重新構建它,當我再次進入我所在的計算機時實驗) – vsz