2012-12-14 166 views
6

我試圖開始使用emgu CV開放CV for C#。但是我無法使其工作。 我按照本指南使用emgu CV​​,使簡單的程序,但我得到以下錯誤:(任何知道我做錯了嗎?)無法加載DLL'opencv_core242':無法找到指定的模塊。 Emgu CV

System.TypeInitializationException was unhandled 
     Message=The type initializer for 'Emgu.CV.CvInvoke' threw an exception. 
     Source=Emgu.CV 
     TypeName=Emgu.CV.CvInvoke 
     StackTrace: 
     at Emgu.CV.Image`2..ctor(String fileName) in c:\Emgu\emgucv-windows-x86-gpu 2.4.2.1777\Emgu.CV\Image.cs:line 144 
     at TEST.Form1.button1_Click(Object sender, EventArgs e) in c:\documents and settings\laci\my documents\visual studio 2010\Projects\TEST\TEST\Form1.cs:line 28 
     at System.Windows.Forms.Control.OnClick(EventArgs e) 
     at System.Windows.Forms.Button.OnClick(EventArgs e) 
     at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 
     at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 
     at System.Windows.Forms.Control.WndProc(Message& m) 
     at System.Windows.Forms.ButtonBase.WndProc(Message& m) 
     at System.Windows.Forms.Button.WndProc(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
     at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
     at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
     at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
     at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 
     at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
     at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
     at System.Windows.Forms.Application.Run(Form mainForm) 
     at TEST.Program.Main() in c:\documents and settings\laci\my documents\visual studio 2010\Projects\TEST\TEST\Program.cs:line 18 
     at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
     at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
     at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
     at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
     at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
     at System.Threading.ThreadHelper.ThreadStart() 
    InnerException: System.DllNotFoundException 
     Message=Unable to load DLL 'opencv_core242': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 
     Source=Emgu.CV 
     TypeName="" 
     StackTrace: 
      at Emgu.CV.CvInvoke.cvRedirectError(CvErrorCallback errorHandler, IntPtr userdata, IntPtr prevUserdata) 
      at Emgu.CV.CvInvoke..cctor() in c:\Emgu\emgucv-windows-x86-gpu 2.4.2.1777\Emgu.CV\PInvoke\CvInvoke.cs:line 166 
     InnerException: 
+1

你的代碼是什麼?你有什麼嘗試?要特別。 –

+0

:(不知道以可讀的方式發佈核心...但它是從文件簡單的代碼加載圖像,並將其轉換爲另一種格式的按鈕單擊。 – Laci

+0

可能重複[Emgu.CV.CvInvoke拋出一個異常] (http://stackoverflow.com/questions/12509582/emgu-cv-cvinvoke-threw-an-exception) –

回答

8

由於Emgu.CV只是一個.NET包裝器(請參閱http://en.wikipedia.org/wiki/Wrapper_library),因此您需要將OpenCV的本機.DLL文件放入您的應用程序輸出目錄中。

您可以在http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.2/OpenCV-2.4.2.exe/download

+0

我在我的應用程序輸出目錄中提供了兩個鏈接中提到的dll – Laci

+3

Laci,當.DLL也需要另一個dll時。 DLL,你不會在錯誤信息中看到另一個.DLL,例如,1.dll需要2.dll,你的C#包裝器使用1.dll,錯誤信息會顯示找不到1.dll,因爲1。 DLL無法加載。因此,我建議您添加您認爲Emgu使用的OpenCV的所有.DLL文件,並在您的應用程序編譯完成後,嘗試刪除未使用的文件,直到您只有必需的文件。祝你好運。 –

+0

這有助於感謝你Dídac。 – Laci

0

完全一樣的錯誤狀態 - 它無法找到應用程序工作目錄中的本機DLL。確保將opencv_core242.dll庫複製到應用程序的輸出目錄和工作目錄。

+0

是的,但問題是我有那個DLLs .. – Laci

+0

你確定它在工作目錄嗎?你可以用「Environment.WorkingDirectory」進行驗證,檢查路徑並檢查該DLL是否沿着該路徑存在 –

1

舊的,但我有同樣的問題。結果2.4.0有GPU集成,如果你沒有Nvidia卡,nvcuda.dll丟失,並且opencv_core242.dll加載失敗。試了一下,唯一的解決辦法是回到2.3.0,一切正常。

0

http://www.dependencywalker.com/下載依賴關係者walker並打開聲稱未加載的.dll文件。然後查找依賴關係,如果甚至是系統文件夾(system32或syswow64)的應用程序的目錄中缺少一個或多個依賴項,則需要將它們放在那裏。

3

我會爲你節省很多時間。 EMGU CV版本2.4。*缺少的dll是「nvcuda.dll」,它不是EMGU的二進制文件的一部分,但它通常位於system32文件夾中(也許你需要安裝nvidia驅動程序,如果不只是尋找dll在線)

+1

完全在我的情況。只需從http://sourceforge.net/projects/emguexample/files/下載nvcuda.dll,然後按照說明操作並將nvcuda.dll複製到工作目錄中(在我的例子中是Debug文件夾 - 我將Emgu CV與Visual一起使用Studio 2012)。 –

相關問題