2012-04-07 64 views
2

我想用Windows XP上的opencv使用Qt創建一個gui應用程序。我之前使用過Qt和opencv,但從來沒有在一起。長話短說,我無法獲得與Qt的opencv工作。在Windows上使用Qt和opencv生成問題

就在我搜索的所有論壇上,只有一小段散佈的信息,通常沒有答案,我在這裏總結了我採取的所有步驟。

  1. 爲Windows下載Qt SDK(4.6.3),併成功使用它一段時間。
  2. 下載了適用於Windows的opencv 2.3.1 megapack,包含二進制文件。我成功地編譯了包括opencv的Qt項目,但是任何opencv函數調用都導致崩潰。我在一些論壇上看到,Windows Megapack中的二進制文件不支持Qt,我必須自己構建opencv。我下載了最新版本的CMake(2.8)。
  3. 我下載的OpenCV源從這裏:http://code.opencv.org/svn/opencv/branches/2.3/
  4. 我下載的源Qt的版本我有(4.6.3)
  5. 我發現我的老版本的Visual Studio 2005
  6. 我創建了一個與CMake的VS2005項目,檢查Qt的支持。 (WITH_QT已檢查)
  7. 我在VS2005中構建了opencv。它創建了大部分庫,但並非全部。 Highgui是失敗的之一。問題:找不到Qt\4.6.3\src\corelib\global\qconfig.h。在我下載的源文件中根本沒有qconfig.h!我發現一些模板qconfig-large.h,qconfig-small.h等,所以我將其中一個改名爲qconfig.h。現在我得到一個充滿鏈接器錯誤的屏幕。
  8. 我下載了最新的Qt源代碼(4.8.1)。現在有一個源文件qbenchmark.h,其中包含QtTest/qbenchmarkmetric.h找不到。
  9. 我放棄了,試了MinGW。
  10. 我下載了最新的MinGW的(2011.11.18)
  11. 我設置的CMake生成一個MinGW的makefile文件,但我得到了以下錯誤:

CMake Error at C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/Platform/Windows-g++.cmake:1 (INCLUDE): 
    include could not find load file: 
C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/Platform/Windows-gcc.cmake 
Call Stack (most recent call first): 
C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/CMakeCXXInformation.cmake:59 (INCLUDE) 

誠然,有一個Windows-g++.cmake文件中的模塊/平臺目錄,但它引用Windows-gcc.cmake不存在!

有沒有人設法在Windows上構建帶Qt支持的opencv,如果是的話,怎麼樣?

編輯

的問題肯定是與Qt的來源。我設法生成了一個MinGW makefile,並且該版本一切正常,直到它在src/testlib/qtestsystem.h中停止,因爲有一個包含QtCore/qelapsedtimer.h的文件,該文件位於完全不同的目錄中! Qt是否發佈不完整的資源,或者我做錯了什麼?

EDIT2

我的煎熬還在繼續。我清理了一切並重新開始。這一次,甚至沒有嘗試Visual Studio。

  1. 我下載了最新的Qt庫與源(4.8.1)
  2. 我下載了最新的MinGW的(2011.11.18)
  3. 通過CMake我成功創建了一個Makefile文件,以及與MinGW的建造它。我有一些閃亮的新庫(libopencv_core231,etv。)。我很高興,但我很快就要慶祝這一點了!
  4. 我下載了最新的Qt SDK(奇怪的是,它是4.8.0,所以我將Qt Creator設置爲使用4.8.1),並創建了一個沒有opencv的測試程序來查看它是否工作。有效!
  5. 我試過使用opencv,只是閱讀和顯示圖像。它沒有工作。 exited with code -1073741511
  6. 我試着在Qt Creator之外直接運行.exe。它抱怨失蹤libstdc++-6.dll
  7. 我做了一個搜索,並在我的MinGW安裝(c:\ mingw \ bin,958 KB)和一個在我的Qt安裝(c:\ qt \ mingw \ bin ,793 KB) - 這個命令與Qt捆綁在一起。
  8. 我試了兩個,通過複製它們在我的.exe是相同的文件夾,但都沒有工作。我得到了「程序入口點_ZNSt9exceptionD2Ev不能位於動態鏈接庫libstdC++ - 6.dll中。」既。這是在調試,所以我試圖釋放,我有一個類似的錯誤,沒有找到其他入口點。
  9. 我搜索了論壇,並且發現了我應該靜態鏈接libstdC++的建議。我在文件c:\Qt\mkspecs\win32-g++\qmake.conf的行QMAKE_LFLAGS =QMAKE_LFLAGS_DEBUG =處插入-static-libgcc -static-libstdc++。即使在重新啓動Qt Creator並重建之後,這根本沒有任何效果。如果我不復制libstdc++-6.dll,它仍然需要它。

當然,沒有OpenCV的我簡單的測試程序從exe無需任何libstdc++-6.dll運行,這樣就意味着我的OpenCV的構建是負責?我想重新構建opencv,但是我找不到涉及libstdC++的任何CMake設置!

這可能是一個線索: 當使用libstdc++-6.dll文件之一,大約缺少入口點的錯誤中提到QtGui4.dll。我有一個調試版本,所以它應該是QtGui * d * 4.d​​ll,不是嗎?調試和發佈有不同的libstdc++嗎?無論哪種方式,我試圖建立發佈,但它也沒有工作,同樣的錯誤

在這個星球上有沒有一個人在Windows XP上一起嘗試使用Qt與QtCreator和opencv 2.3併成功?從搜索所有論壇和Qt檔案,我找不到任何人。我已準備好在Linux中進行開發,但無論如何我遲早需要Windows版本。

我試圖抵制黑暗的一面,它竊竊私語忘了Qt,MinGW,g ++,opencv並嘗試在Visual Basic中一起破解一些東西。哦,恐怖!

回答

2

你應該從源代碼構建OpenCV,就像你已經做到的一樣,沒有麻煩。請注意,最新版本的OpenCV可以使用Qt構建。 Highgui可以選擇使用Qt!如果您使用或不使用Qt構建,這是您的選擇。

我現在用Qt庫和OpenCV很長一段時間。我從來沒有去過SDK,而是使用爲相應VS版本構建的庫。看到這裏:http://qt.nokia.com/downloads/downloads#qt-lib

你可以爲VS2008和VS2010,但早期版本也可用於VS2005內置。老版本的Visual Studio吸這麼難,爲什麼要使用它們呢。

然後,我從來沒有遇到過將它集中在CMake項目中的問題。它會沿着線:

find_package(OpenCV) 
find_package(Qt4 ${VOLE_MINIMUM_QT_VERSION} COMPONENTS QtCore QtGui) 
find_package(Qt4 ${VOLE_MINIMUM_QT_VERSION} COMPONENTS QtOpenGL) 

...

qt4_wrap_cpp(moc_sources ${vole_module_moc_sources}) 
qt4_wrap_ui(uic_sources ${vole_module_ui_sources}) 
qt4_add_resources(rcc_sources ${vole_module_rcc_sources}) 

你知道的,平常的東西。

五個星期後,你可能會得到它在Windows下運行,而在GNU/Linux下它是在shell中的三個命令。

+0

我不太明白:我需要一些特定的Qt庫來構建一個兼容Qt的opencv嗎?問題是,在Qt 4.6.3和4.8.1中都包含了頭文件,這些頭文件在我從官方Qt站點下載的源存儲庫中不存在。 – vsz 2012-04-07 18:08:48

+0

MinGW解決方案也可以,但問題類似:缺少文件。我之前從未使用過MinGW,所以我不知道'Windows-gcc.cmake'應該是什麼樣子。 – vsz 2012-04-07 18:10:06

+0

我只能描述我做了什麼。我使用OpenCV,Qt庫(不是SDK,尤其是VS)和VS 2008(以及2005年之前)。我不知道爲什麼你有一個丟失的文件問題,因爲我從來沒有遇到它。我也從未嘗試SDK,從未嘗試過mingw。正如我指出的那樣,您是否嘗試構建OpenCV,並且沒有Qt支持?您可以考慮向Qt項目提交錯誤報告。 – ypnos 2012-04-08 23:26:56

2

您可能更容易配置Qt Creator與OpenCV。 This post顯示瞭如何實現這一步,一步一步!它顯示了幾個截圖以幫助這個過程。

3

只是FYI,我基本上通過結合Qt和OpenCV相同的噩夢。這是我的經驗:

  1. 我用Qt Creator 2.4.1下載了Qt SDK 4.7.4並安裝它,沒問題。
  2. 我下載並安裝OpenCV的2.4.2,不知道它已經來到與MinGW的...
  3. 我下載了MinGW的編譯器當然也有不同的版本比使用Qt
  4. 在此之前已經是一個完全搞砸了我的CMake,即使當我明確告訴CMake使用Qt gcc.exe和g ++。exe時,它也使用了我剛剛安裝的MinGW中的一些東西。可能是因爲我急切地將每個目錄添加到我的PATH變量中。我真是個傻瓜!
  5. CMake無法生成任何有用的文件,所以我放棄並安裝了OpenCV超級包,希望這會讓事情變得更容易。 6.我花了數小時想知道,爲什麼從超級包裝中的Qt和OpenCV不能一起正常工作。我從未完全理解。我遇到了其他用戶在這裏描述的相同錯誤,例如控制檯程序在包含OpenCV後立即崩潰。奇怪的是,我可以從FileExplorer手動啓動可執行文件(我在工程文件夾中添加了所有可以想到的.dll文件:opencv_core242.dll,opencv_highgui242.dll,QtCore4.dll,QtGui4.dll等等... )但是我無法從Qt Creator環境中啓動我的小測試程序。
  6. 我分析瞭如果使用depends.exe發現我的DLL有問題,並發現即使我使用MinGW編譯器將所有內容都配置爲DEBUG,我的程序仍嘗試使用QtCore4.dll而不是QtCore4d.dll。所以我最好的猜測是,它是混合調試和發佈版本。
  7. 我放棄了使用超級包,並再次嘗試使用CMAKE,然後使用Qt MinGW版本構建OpenCV,並確保爲調試模式設置所有內容並啓用QT選項。但到目前爲止沒有運氣
  8. 我停止使用MinGW並切換到MSVC2010,它工作得更好。但是我仍然無法調試該程序,因爲MSVC2010調試器引擎似乎缺失。我真的不知道如何手動添加這個,但我仍然在努力

所以我可以肯定地說,使用Qt和OpenCV對於一個沒有經驗的人來說並不是微不足道的!