2012-08-25 154 views
3

我嘗試了兩種使用opencv和qt創建器 的方法,第一個使用了Mingw,其中dll和.dll.a文件已經與opencv庫一起下載,我只是添加了對在.pro文件.dll.a文件如下使用Qt Creator設置OpenCV 2.4.2

INCLUDEPATH += D:\\OpenCV\\opencv\\build\\include 
LIBS += D:\\OpenCV\\opencv\\build\\x64\\mingw\\lib\\libopencv_calib3d242.dll.a 
LIBS += D:\\OpenCV\\opencv\\build\\x64\\mingw\\lib\\libopencv_contrib242.dll.a 
LIBS += D:\\OpenCV\\opencv\\build\\x64\\mingw\\lib\\libopencv_core242.dll.a 
LIBS += D:\\OpenCV\\opencv\\build\\x64\\mingw\\lib\\libopencv_features2d242.dll.a 

我有一個簡單的代碼來測試的OpenCV:

#include <QtCore/QCoreApplication> 
#include <opencv/cv.h> 

using namespace cv; 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    Mat image; 

    return a.exec(); 
} 

,但我得到了構建問題如下

C:\Users\Kato\Documents\QT projects\QtOpenCVYaRab\debug\main.o:-1: In function ~Mat': d:\OpenCV\opencv\build\include\opencv2\core\mat.hpp:278: error: undefined reference to cv::fastFree(void*)' d:\OpenCV\opencv\build\include\opencv2\core\mat.hpp:367: error: undefined reference to `cv::Mat::deallocate()' :-1: error: collect2: ld returned 1 exit status

下面是一些編譯輸出:

Running build steps for project QtOpenCVYaRab... 
Configuration unchanged, skipping qmake step. 
Starting: "C:\QtSDK\mingw\bin\mingw32-make.exe" 
C:/QtSDK/mingw/bin/mingw32-make -f Makefile.Debug 
mingw32-make[1]: Entering directory `C:/Users/Kato/Documents/QT projects/QtOpenCVYaRab' 
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL 

d:/OpenCV/opencv/build/include/opencv2/core/mat.hpp:278: undefined reference to `cv::fastFree(void*)' 
debug/main.o:d:/OpenCV/opencv/build/include/opencv2/core/mat.hpp:367: undefined reference to `cv::Mat::deallocate()' 
collect2: ld returned 1 exit status 
mingw32-make[1]: *** [debug\QtOpenCVYaRab.exe] Error 1 
mingw32-make: *** [debug] Error 2 
The process "C:\QtSDK\mingw\bin\mingw32-make.exe" exited with code 2. 
Error while building project QtOpenCVYaRab (target: Desktop) 
When executing build step 'Make' 

第二種方法是使用cmake編譯OpenCV庫的使用Visual Studio 2010來構建它,並在bin文件夾添加引用的文件,但我得到幾乎相同的建築問題。

+0

請看看(OpenCV與其他圖形用戶界面)[http://support.microsoft.com/kb/2210937/opencv-with-other-gui-like-qt-or-wxwidgets-on-win32-vc/2212909 #2212909] – masad

回答

5
#include "iostream" 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 

using namespace cv; 
using namespace std; 

int main() 
{ 
    IplImage *image = cvLoadImage("C:\\lena.jpg"); 
    Mat im(image); 
    imshow("TEST",im); 
    waitKey(); 
    return 0; 
} 

這是烏爾的main.cpp ...上述程序顯示海倫的圖片...使用雙反斜線用於指示目錄的變化在Windows平臺上......一些imread並如何對我的工作,所以我已經加載的圖片作爲IplImage結構和鑄造它太...ü做cn的下面還..

IplImage *image = cvLoadImage("C:\\lena.jpg",1); 
cvShowImage("TEST",image); 
cvWaitKey(); 

你的.pro文件應有前面提到的以下幾行...

INCLUDEPATH += D:\OpenCV\opencv\build\include 

LIBS +=-LD:\OpenCV\opencv\build\x64\mingw\lib\ 
-lopencv_core242\ 
-lopencv_highgui242\ 
-lopencv_imgproc242\ 
-lopencv_video242\ 

和你的系統變量命名的路徑應該有

  1. d:\ Opencv2.4.2 \ OpenCV的\建設\ 86 \ VC9 \ BIN(如果你的Qt 4.8.1 桌面MSVC2008(QTSDK)作爲調試你的目標)
  2. d:\ Opencv2.4.2 \ OpenCV的\建設\ 86 \ MinGW的\ BIN(如果你的目標是基於Qt MinGW的X86)
  3. d:\ OpenCV2.4.2 \ OpenCV的\建設\ COMMON \ TBB \ ia32 \ vc9(mingw)(我添加了這個因爲它顯示了一些奇怪的錯誤...你可以試試看)

編輯路徑變量後關閉Qt ide /應用程序,並重新啓動它,以便系統變量得到反映。

+0

作爲魅力工作。非常感謝。多麼美麗的帖子。 – CroCo

0

您必須指定與-L庫路徑,然後用

-l<libname_without_extension> 

添加庫文件對於UNIX(安裝在默認位置):

unix: LIBS += -lopencv_core 
unix: LIBS += -lopencv_highgui 

的Windows(你的問題) :

win32: LIBS += -L C:\OpenCV2.3\opencv\build\gpu\x64\lib\ -lopencv_core231 
+0

不,它沒有工作,同樣的錯誤! –

1
INCLUDEPATH += D:\OpenCV\opencv\build\include 

LIBS +=-LC:\OpenCV\opencv\build\x64\mingw\lib\ 
-lopencv_core242\ 
-lopencv_highgui242\ 
-lopencv_imgproc242\ 
-lopencv_video242\ 


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

using namespace cv; 

int main() 
{ 
} 

如果UA重新運行它作爲一個控制檯應用程序然後不需要包括QtCore/QtApplication

+0

不幸的是同樣的錯誤! –

0

從提到的錯誤看來,Opencv庫似乎缺少一些文件/ components.Please開始簡單的Opencv程序。該程序只顯示相機圖像。

請按照給定的鏈接。

http://linux.softpedia.com/get/Multimedia/Graphics/qwebcam-38246.shtml

下載qwebcam的源代碼,並按照指令設置opencv的。這是一個非常簡單的源代碼,並且工作正常(在Linux-os上測試)。

我最近試過用Opencv &這個鏈接對我來說很安靜有用。

希望你能通過這段代碼解決你的錯誤。