2013-05-13 148 views
-1

我們正試圖將OpenCV C++ Windows運行時組件與C#Windows應用商店應用程序集成。我們目前正在開發Windows 8(x64)平臺,並使用Visual Studio 2012和OpenCV 2.4.5。實際目標是在x64平臺上工作的C#Windows Store應用程序中檢測人臉。我們用Visual Studio 2012(x64平臺)成功設置了OpenCV 2.4.5,並將openCV的所有DLL複製到「system32」文件夾中,以便我們能夠在上述平臺上構建和運行openCV項目。在x64平臺上使用C#的OpenCV和Windows應用商店應用程序

這裏是我們面臨的問題:

  1. 我們成功地構建包含了人臉檢測代碼中的C++ Windows運行時組件。但是,只要我們將該應用程序與Store應用程序集成在一起,並嘗試構建WinRT的類的對象。它引發一個異常。
  2. 但是,如果我們評論我們試圖處理圖像和級聯的線條,整個項目就會正常工作。

只有使用上面的代碼,我們才能夠在Win32控制檯應用程序中檢測到人臉。但無法完成這項任務。

我給出了我們正在研究的項目的鏈接。 「https://www.dropbox.com/l/OkEZNMrazzFmV6UOj59KMb

關於項目: 1.「FaceDetectWinRT」是C++ Windows運行時組件項目,該項目包含「Class1.cpp」和其中包含了人臉檢測代碼「Class1.h」。 2.「FaceDetectStoreApp」是C#Windows Store應用程序項目,它具有對上述項目的引用並被聲明爲「啓動」項目。 3.在「MainPage.xaml.cs」類下的「FaceDetectStoreApp」中有一個按鈕,單擊該按鈕時會調用「FaceDetectWinRT」項目的「face」功能,該功能在工作時將返回檢測到的面部座標。

+0

長帖子,但重要的信息丟失;( - *什麼異常*你會得到什麼,當你調用opencv代碼? – berak 2013-05-13 09:27:42

回答

1

我做了同樣的事情,結果非常相似。在ARM設備上部署WinRT應用程序時,我獲得了成功。您需要:

  1. 包括在標記爲「內容」
  2. 不要忘了highgui DLL中的C#項目OpenCV的dll文件。 objdetect DLL取決於它。
  3. 確保您引用的所有OpenCV的.lib文件,每OpenCV的DLL
  4. 交換機配置管理器
  5. 部署到ARM的設備上運行ARM(即表面)的配置通常是通過遠程調試器
  6. 做一個

我還沒有成功地在x86設備(即Surface Pro)上運行應用程序。我相信問題在於objdetect dll取決於highgui dll。 highgui dll的ARM構建僅依賴於一些標準庫。 x86構建依賴於WinRT不可用的其他幾個庫。我想你可以通過在沒有highgui的情況下爲x86構建OpenCV來實現它。您可以通過將BUILD_opencv_highgui CMake變量設置爲OFF來執行此操作。

相關問題