2012-12-14 18 views
6

Próbuję zacząć używać CV otwarte CV dla C#. Ale mam problem z działaniem. Obserwuję ten poradnik, aby prosty program za pomocą emgu CV Link ale otrzymuję następujący błąd: (dowolny pomysł co robię źle?)Nie można załadować biblioteki DLL "opencv_core242": Nie można znaleźć określonego modułu. 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

Jaki jest twój kod? Co próbujesz? Bądź spontaniczny. –

+0

:(Nie wiem, aby opublikować rdzeń w czytelny sposób ... Ale był to prosty obraz ładujący kod z pliku i przekonwertować go do innego formatu za pomocą kliknięcia przycisku .. – Laci

+0

możliwy duplikat [Emgu.CV.CvInvoke zwrócił wyjątek] (http://stackoverflow.com/questions/12509582/emgu-cv-cvinvoke-threw-an-exception) –

Odpowiedz

8

Ponieważ Emgu.CV jest po prostu wrapper .NET (patrz http://en.wikipedia.org/wiki/Wrapper_library), należy umieścić rodzime pliki .DLL z OpenCV w katalogu wyjściowym aplikacji.

można znaleźć wymagane pliki, pobierając odpowiednią wersję OpenCV na http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.2/OpenCV-2.4.2.exe/download

+0

Zrobiłem umieścić dwa biblioteki DLL wymienione w linku w katalogu wyjściowym mojej aplikacji – Laci

+3

Laci, gdy .DLL również wymaga innego. DLL, nie zobaczysz innego pliku .DLL w komunikacie o błędzie, na przykład 1.dll wymaga 2. dll, a twój C# wrapper używa 1.dll. Komunikat o błędzie pokaże, że 1.dll nie zostanie znaleziony, ponieważ 1. biblioteka dll nie może zostać załadowana . W związku z tym zalecam dodanie wszystkich plików .DLL OpenCV, które Twoim zdaniem używa Emgu, a po kompilacji aplikacji spróbuj usunąć niepotrzebne pliki, dopóki nie będziesz mieć tylko wymaganych plików. Powodzenia. –

+0

To pomogło ci podziękować Dídac. – Laci

0

Dokładnie jak mówi o błędach - nie może znaleźć natywna biblioteka DLL w katalogu roboczym twojej aplikacji. Upewnij się, że biblioteka opencv_core242.dll jest kopiowana do katalogu wyjściowego i katalogu roboczego aplikacji.

+0

Tak, ale problem polega na tym, że mam tam DLL. – Laci

+0

Czy jesteś pewien, że znajduje się on w katalogu WORKING? zweryfikuj to za pomocą "Environment.WorkingDirectory" Sprawdź ścieżkę i sprawdź, czy plik DLL istnieje na tej ścieżce –

1

Stary, ale miałem ten sam problem. Okazało się, że 2.4.0 ma integrację z GPU i jeśli nie masz karty Nvidia, brakuje pliku nvcuda.dll i nie można załadować pliku opencv_core242.dll. Próbowałem wszystkiego, jedynym rozwiązaniem było przejście do wersji 2.3.0 i wszystko działało dobrze.

0

Pobierz program do obsługi zależności od http://www.dependencywalker.com/ i otwórz plik .dll, który nie chce się załadować. Następnie wyszukaj zależności, jeśli jeden lub więcej z nich brakuje w katalogu aplikacji nawet w folderze systemowym (system32 lub syswow64), to muszą tam być.

3

Zaoszczęszczę wam dużo czasu. dla wersji EMGU CV 2.4. * Brakującą biblioteką DLL jest "nvcuda.dll", która nie jest częścią plików binarnych EMGU, ale zwykle znajduje się w folderze system32 (może potrzebujesz zainstalować sterownik nvidia, jeśli nie po prostu szukasz biblioteki dll online)

+1

dokładnie w moim przypadku. Wystarczy pobrać plik nvcuda.dll z http://sourceforge.net/projects/emguexample/files/, a następnie postępować zgodnie z instrukcjami i skopiować plik nvcuda.dll do swojego katalogu roboczego (w moim przypadku jest to folder Debug - używam Emgu CV z Visual Studio 2012). –

Powiązane problemy