2013-06-24 9 views
13

Ich bekomme diese FehlerDie Typeninitialisierer für ‚Emgu.CV.CvInvoke‘ hat eine Ausnahme

Die Typeninitialisierer für ‚Emgu.CV.CvInvoke‘ eine Ausnahme ausgelöst hat.

wenn ich versuche, Emgu CV zu verwenden. Ich habe versucht alles, was ich denken kann, um das zu beheben, aber es gibt immer noch den gleichen Fehler, und wenn ich auf eine Schaltfläche klicke zeigt es

Object Referenz nicht auf eine Instanz eines Objekts festgelegt.

Dies ist der Code, ich versuche:

void ProcessFunction(object sender, EventArgs e) 
{ 
    imgOrg = capturecam.QueryFrame(); 
    if (imgOrg == null) return; 
    imgProc = imgOrg.InRange(new Bgr(50, 50, 50), new Bgr(255, 255, 255)); 
    imgProc = imgProc.SmoothGaussian(9); 
    imageBox1.Image = imgOrg; 
    imageBox2.Image = imgProc; 
} 

Was könnte ich falsch gemacht haben und wie kann ich debuggen diese weiter? Vielen Dank!

+0

Ich weiß, dass dies eine alte Frage, aber wenn Ihr Betriebssystem 64bit dann sollten Sie EmguCV x64 dlls verwenden und wenn OS 32bit ist, dann EmguCV x86 dlls. Es ist nicht so wichtig, wie Sie Ihre Lösung bauen, kann leicht als "Any CPU" erstellen. – Edgar

Antwort

9

Es ist wahrscheinlich nicht möglich, die nicht verwalteten DLL-Abhängigkeiten zu laden. Ein paar suggestoins:

  1. Achten Sie darauf, Ihre .NET-Projekt wird x86 Targeting statt AnyCPU, da Sie wahrscheinlich die x86-Version von OpenCV haben.
  2. Sicherstellen, dass der OpenCV-DLLs in Ihrer PATH (oder direkt in dem Verzeichnis ist, wenn dies eine Konsole/WinForms/WPF-Anwendung.)
+0

ya es in platform target x86 .. und ich habe die opencv DLLs in den Ordner Verzeichnis Debug-Ordner enthalten, aber immer noch gibt es den gleichen Fehler ... –

+1

Können Sie den Debugger einbrechen, wenn die Ausnahme ausgelöst wird? Möglicherweise erhalten Sie dort weitere Informationen in den Ausnahmedetails. – jlew

+0

ich bin neu, ich weiß nicht genau, wie ich den Debugger –

5

Kopieren Sie alle nicht verwalteten DLLs in dem Ordner ist Ihre EMGU-Installation, wo sich Ihre EXE-Datei befindet (Freigabe- oder Debug-Ordner Ihres Projektordners).
In meinem Fall sind nicht verwalteten DLLs in "C: \ Emgu \ emgucv-windows-universal-CUDA 2.9.0.1922 \ bin \ x86"

+0

In meinem Fall habe ich einen sauberen Build erstellt, und es löschte, was im bin-Ordner war. Erneute Installation der Dateien wiederhergestellt. Hier ist, was da drin standardmäßig: concrt140.dll cvextern.dll msvcp140.dll opencv_ffmpeg330_64.dll vcruntime140.dll – Brian

2

Sie sollten Abhängigkeit dll in Projekt- und Change 'Kopie Ausgabeverzeichnis hinzufügen opencv_core290.dll, opencv_highgui290.dll,: von Emgu \ emgucv-windows-universal-CUDA 2.9.0.1922 \ bin \ x86

in meinem Projekt Add - 'Eigenschaft auf 'Kopie immer'(> vorhandenes Element hinzufügen) opencv_ffmpeg290.dll, opencv_imagyproc290.dll und cudart32_55.dll

13

ich hatte Dasselbe Problem. Meine innere Ausnahme war "DLL konnte nicht geladen werden" opencv_core290 '".

Sie müssen x86- und x64-Ordner von "yourEmguFolder/bin" in das Ausgabeverzeichnis (bin) Ihres Projekts kopieren. Erstellen Sie dann das Projekt erneut und führen Sie es aus.

Nach emgu wiki

+0

Jungs ist dies der einzige Weg, die für mich gearbeitet nach mehreren Stunden versuchen !! Dank Muhammed – Phoenician

+0

Diese Lösung funktioniert auch remote Server. –

2

Zuerst haben Sie drei Bibliotheken zu einem Projekt hinzuzufügen. opencv_core290.dll, opencv_highgui290.dll, opencv_imgproc290.dll. Hier bezieht sich 290 auf Ihre opencv-Version. Nach dieser Änderung in ihrer Eigenschaft "nicht kopieren" auf "immer kopieren". als speichern Sie Ihr Projekt. Danach gehe zum folgenden Ort. Wenn Ihr Computer 64 Bit hat, dann gehen Sie zum folgenden Ordner "C: \ Emgu \ emgucv-windows-universal-cuda 2.9.0.1922 \ bin \ x64" oder wenn Sie 32 Bit verwenden, gehen Sie zu "C: \ Emgu \ emgucv- windows-universal-cuda 2.9.0.1922 \ bin \ x86 "und kopiere alle DLLs in diesem Ordner und füge sie in deinen Your Project/bin/debug/Ordner ein. als dein Projekt neu aufzubauen. Dann wird es gut funktionieren.

Viel Glück !!!!

0

Ich hatte das gleiche Problem in meiner 32-Bit-Maschine für 3 Tage. Ich löste dies, indem ich einfach alle dlls in den Ordner system32 aus den Ordnern bin und x86 kopierte und es funktionierte. Es sieht so aus, als gäbe es DLLs, die von anderen DLLs abhängen und in dem Moment, in dem alles übertragen wird. Ich hatte keine Zeit herauszufinden, welche.

0

Für mich Problem wurde durch einen Klick in Visual Studio gelöst:

Menü -> Projekt -> Eigenschaften -> Erstellen -> Bevorzugen 32-Bit.

Es muss ein Problem mit Emgu (wahrscheinlich x86) und meinem Betriebssystem x64) gewesen sein.

1

Fanden diese auf C#, VS 2017 emgu Version 3.2.0.2682

ein einfaches Build auf AnyCPU Versuchte und die schlechte Format Ausnahme erhalten. So versuchte ich x86 schlechte Format Ausnahme wegen möglicher Vorschläge in den Kommentaren. Schließlich habe ich es als x64 und es hat gut funktioniert.

0

Sie LD_LIBRARY_PATH verwendet, könnte es zu lösen:

  1. die Warnung öffnen und überprüfen, was lib Ihr Programm fehlt

  2. den Pfad finden

    $ # suchen Sie den Bibliothekspfad finden

  3. Setzen Sie in Ihrer IDE die Umgebungsvariable LD_LIBRARY_PATH auf den lib Pfad, (ich benutze mono entwickeln, wird der Pfad Ausführen -> Run With -> Benutzerdefinierte Parameter ...)

arbeiten sie gut jetzt beenden :)