2012-12-14 5 views
6

Sto provando ad iniziare ad usare CVC aperto CV per C#. Ma ho problemi a farlo funzionare. Sto seguendo questa guida per rendere semplice programma utilizzando emgu CV Link ma ottengo errore seguente: (minima idea di cosa sto facendo male?)Impossibile caricare la DLL "opencv_core242": impossibile trovare il modulo specificato. 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

Qual è il tuo codice? Che cosa hai provato? Essere spesific –

+0

:(Non so di pubblicare core in modo leggibile ... Ma è stato semplice caricare il codice dell'immagine da file e convertirlo in un altro formato con un clic del pulsante. – Laci

+0

possibile duplicato di [Emgu.CV.CvInvoke ha gettato un'eccezione] (http://stackoverflow.com/questions/12509582/emgu-cv-cvinvoke-threw-an-exception) –

risposta

8

Poiché Emgu.CV è solo un wrapper .NET (vedere http://en.wikipedia.org/wiki/Wrapper_library), è necessario inserire i file .DLL nativi di OpenCV nella directory di output dell'applicazione.

È possibile trovare i file richiesti scaricando la versione corrispondente del OpenCV a http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.2/OpenCV-2.4.2.exe/download

+0

Ho inserito due dll menzionati nel collegamento nella directory di output dell'applicazione. – Laci

+3

Laci, quando anche una DLL richiede un'altra. DLL, non visualizzerai l'altra DLL nel messaggio di errore, ad esempio 1.dll richiede 2.dll e il wrapper C# utilizza 1.dll. Il messaggio di errore mostrerà che 1.dll non è stato trovato, poiché 1. dll non può essere caricato . Pertanto, ti consiglio di aggiungere tutti i file .DLL di OpenCV che pensi che usi Emgu e, una volta compilata la tua app, prova a rimuovere i file non utilizzati fino a quando non hai solo i file richiesti. In bocca al lupo. –

+0

Questo ha aiutato grazie Dídac. – Laci

0

Esattamente come gli stati di errore - non riesce a trovare la DLL nativa nella directory di lavoro della tua applcation. Assicurati che la libreria opencv_core242.dll sia copiata nella directory di output e nella directory di lavoro della tua applicazione.

+0

Sì, ma il problema è che ho quelle DLL lì .. – Laci

+0

Sei sicuro che sia nella directory di LAVORO? Puoi verificare questo con "Environment.WorkingDirectory" .Controllare il percorso e verificare se la DLL esiste lungo tale percorso –

1

Vecchio, ma ho avuto lo stesso problema. Risulta che 2.4.0 ha l'integrazione GPU e se non si dispone di una scheda Nvidia, manca nvcuda.dll e non si carica opencv_core242.dll. Provato tutto, l'unica soluzione era tornare alla 2.3.0 e tutto ha funzionato bene.

0

Scaricare Dipendente Walker da http://www.dependencywalker.com/ e aprire il .dll che richiede di non caricare. Quindi cerca le dipendenze, se uno o più file mancanti nella directory dell'app della tua cartella di sistema (system32 o syswow64) devono essere lì.

3

Ti risparmio un sacco di tempo. per EMGU CV versione 2.4. * La dll mancante è "nvcuda.dll" che non fa parte dei binari di EMGU ma di solito si trova nella cartella system32 (forse è necessario avere il driver nvidia installato, se non solo cercare la dll online)

+1

esattamente nel mio caso. Basta scaricare nvcuda.dll da http://sourceforge.net/projects/emguexample/files/ poi seguire le istruzioni e copiare nvcuda.dll nella directory di lavoro (nel mio caso è la cartella Debug - sto usando Emgu CV con Visual Studio 2012). –