2012-12-14 11 views
6

Ich versuche, Emgu CV open CV für C# zu verwenden. Aber ich habe Probleme, es zum Laufen zu bringen. Ich folge diesen Leitfaden einfaches Programm mit emgu CV Link zu machen, aber ich bekomme folgende Fehlermeldung: (keine Ahnung, was ich falsch mache?)DLL konnte nicht geladen werden 'opencv_core242': Das angegebene Modul konnte nicht gefunden werden. 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

Wie lautet Ihr Code? Was hast du probiert? Seien Sie spezifisch. –

+0

:(Weiß nicht Core in lesbarer Weise zu veröffentlichen ... Aber es war einfach Code laden Bild aus Datei und wandeln Sie es in ein anderes Format auf einen Klick auf die Schaltfläche. – Laci

+0

mögliche Duplikat von [Emgu.CV.CvInvoke warf eine Ausnahme] (http://stackoverflow.com/questions/12509582/emgu-cv-cvinvoke-threw-an-exception) –

Antwort

8

Da Emgu.CV nur ein .NET-Wrapper ist (siehe http://en.wikipedia.org/wiki/Wrapper_library), müssen Sie die nativen .DLL-Dateien von OpenCV in das Ausgabeverzeichnis Ihrer Anwendung einfügen.

Sie können die erforderlichen Dateien finden, indem Sie die entsprechende Version von OpenCV Download unter http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.2/OpenCV-2.4.2.exe/download

+0

Ich habe zwei DLLs in Link in meinem Anwendungsausgabeverzeichnis angegeben. – Laci

+3

Laci, wenn eine .DLL auch eine andere benötigt. B. 1. DLL benötigt 2.dll und Ihr C# -Wrapper verwendet 1.dll. Die Fehlermeldung zeigt, dass 1.dll nicht gefunden wird, da 1 .dll in der Fehlermeldung. dll kann nicht geladen werden . Daher empfehle ich Ihnen, alle .DLL-Dateien von OpenCV hinzuzufügen, von denen Emgu glaubt, dass sie verwendet werden. Wenn Ihre App kompiliert wurde, versuchen Sie, die nicht verwendeten Dateien zu entfernen, bis Sie nur noch die benötigten Dateien haben. Viel Glück. –

+0

Das half dir Dídac zu danken. – Laci

0

Genau wie die Fehlerzustände - es kann nicht finden die native DLL im Arbeitsverzeichnis Ihrer Anwendung. Stellen Sie sicher, dass die opencv_core242.dll-Bibliothek in das Ausgabeverzeichnis und das Arbeitsverzeichnis Ihrer Anwendung kopiert wird.

+0

Ja, aber das Problem ist, ich habe diese DLLs dort .. – Laci

+0

Sind Sie sicher, es ist in der WORKING-Verzeichnis? Sie können überprüfen Sie dies mit "Environment.WorkingDirectory". Überprüfen Sie den Pfad, und überprüfen Sie, ob die DLL in diesem Pfad vorhanden ist. –

1

Alte, aber ich hatte das gleiche Problem. Es stellt sich heraus, dass 2.4.0 GPU-Integration hat und wenn Sie keine Nvidia-Karte haben, fehlt nvcuda.dll und opencv_core242.dll kann nicht geladen werden. Versucht alles, die einzige Lösung war, zurück zu 2.3.0 zu gehen und alles hat gut funktioniert.

0

Laden Sie den Abhängigkeitswanderer von http://www.dependencywalker.com/ herunter, und öffnen Sie die .dll, die nicht geladen werden soll. Dann suchen Sie nach den Abhängigkeiten, wenn eine oder mehrere aus dem Verzeichnis der App selbst Ihres Systemordners (system32 oder syswow64) fehlen, dann müssen sie dort sein.

3

Ich werde Sie alle viel Zeit sparen. für EMGU CV Version 2.4. * Die fehlende DLL ist "nvcuda.dll", die nicht Teil der Binärdateien von EMGU ist, aber normalerweise in System32-Ordner (vielleicht müssen Sie NVIDIA-Treiber installiert haben, wenn nicht nur nach der DLL suchen online)

+1

genau in meinem Fall. Laden Sie einfach nvcuda.dll von http://sourceforge.net/projects/emguexample/files/ herunter, folgen Sie den Anweisungen und kopieren Sie nvcuda.dll in Ihr Arbeitsverzeichnis (in meinem Fall ist das der Debug-Ordner - ich benutze Emgu CV mit Visual Studio 2012). –