2013-11-15 113 views
1

我是新來的Qt和OpenCV,我儘量讓用一個簡單的代碼項目:未定義參考QT OpenCV的

中的.pro

QT  += core 

QT  -= gui 

QT += widgets 

TARGET = latihan_2 
CONFIG += console 
CONFIG -= app_bundle 

TEMPLATE = app 


SOURCES += main.cpp 

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

LIBS += E:\OpenCV\OpenCV\opencv\build\x86\vc10\lib\opencv_core246.lib 
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\vc10\lib\opencv_highgui246.lib 
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\vc10\lib\opencv_imgproc246.lib 
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\vc10\lib\opencv_features2d246.lib 
LIBS += E:\OpenCV\OpenCV\opencv\build\x86\vc10\lib\opencv_calib3d246.lib 
在main.cpp中

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

int main(){ 
    //read image 
    cv::Mat image; 
    image = cv::imread("img.jpg"); 
    //create image window named "My image" 
    cv::namedWindow("My Image"); 
    //show the image on window 
    cv::imshow("My image", image); 
    //wait key for 5000ms 
    cv::waitKey(5000); 
    return 1; 

} 

但是,它總是給cv :: imread,cv :: namedWindows和我使用的其他CV函數的未定義引用提供錯誤。

我使用Qt Creator的2.8.1,基於Qt 5.1.1,和OpenCV-2.4.6.0

任何幫助將不勝感激! 謝謝

+0

你使用哪種編譯器? 「\ x86 \ vc10」可能意味着opencv是使用Visual C++編譯的。你是否也使用VC++進行項目編譯或使用mingw32? –

+0

我只是將其更改爲: LIBS + = E:\ OpenCV \ OpenCV \ opencv \ build \ x86 \ mingw \ lib \ libopencv_core246.dll。a LIBS + = E:\ OpenCV \ OpenCV \ opencv \ build \ x86 \ mingw \ lib \ libopencv_highgui246.dll.a LIBS + = E:\ OpenCV \ OpenCV \ opencv \ build \ x86 \ mingw \ lib \ libopencv_imgproc246。 dll.a LIBS + = E:\ OpenCV \ OpenCV \ opencv \ build \ x86 \ mingw \ lib \ libopencv_features2d246.dll.a LIBS + = E:\ OpenCV \ OpenCV \ opencv \ build \ x86 \ mingw \ lib \ libopencv_calib3d246.dll.a ,它的工作!謝謝你,老ufo! – Squirrelcages

+0

不客氣。順便說一句,對於您的簡單應用程序,只需要核心和高級庫。 –

回答

-1

你可能不應該使用:: cv,只是直接使用該函數並嘗試。

對不起,我錯了建議,真正的原因是無法找到您的庫:

應使用此: LIBS + = E:\\OpenCV\\OpenCV\\opencv\\build\\x86\\vc10\\lib\\opencv_core246.lib

+0

我試過這個。並且錯誤更改爲'Mat'未在此範圍內聲明,'image'未在此範圍內聲明等 – Squirrelcages

2

未定義參考錯誤的連接問題,這意味着您的項目已成功編譯,但鏈接程序無法找到這些函數的二進制代碼。

我有一個非常simple OpenCV/Qt project那就是在Windows/Linux的/ Mac OS X的編譯安裝如果你take a look at the .pro file,你會發現,對於Windows我做的:

win32 { 
    message("* Using settings for Windows.") 

    INCLUDEPATH += "C:\\opencv\\build\\include" \ 
        "C:\\opencv\\build\\include\\opencv" \ 
        "C:\\opencv\\build\\include\\opencv2" 

    LIBS += -L"C:\\opencv\\build\\x86\\vc10\\lib" \ 
     -lopencv_core242 \ 
     -lopencv_highgui242 \ 
     -lopencv_imgproc242 
} 

確保更換編號由LIBS引用與您具有的特定OpenCV版本。

這也是重要的國家,OpenCV的編譯與特定的標誌,並根據您安裝的二進制版本,有時你還需要下面的說明添加到的.pro文件的項目:

QMAKE_CXXFLAGS_DEBUG += -Zi -MTd 
QMAKE_CXXFLAGS_RELEASE += -MT 

MTd多線程 - 調試 - DLLMT代表多線程靜態鏈接

0

當我遇到同樣的問題時,Google帶我到了這裏。 這裏的解決方案並沒有幫助我。但最後我在我的案例中發現了這個問題:我沒有在cmake gui中設置CMAKE_BUILD_TYPE的值。 你可以選擇releasedebug,我想你必須選擇一個。

由於最後一個提示,我成功編譯了OpenCV 3.0.0。