2013-06-24 5 views
13

sto ottenendo questo erroreL'inizializzatore di tipo per 'Emgu.CV.CvInvoke' ha generato un'eccezione

L'inizializzatore di tipo per 'Emgu.CV.CvInvoke' ha generato un'eccezione.

quando provo a utilizzare Emgu CV. Ho provato tutto quello che posso pensare per risolvere questo problema, ma continua a dare lo stesso errore e quando faccio clic su un pulsante mostra

Riferimento oggetto non impostato su un'istanza di un oggetto.

Questo è il codice che sto cercando:

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; 
} 

cosa potrebbe ho fatto di sbagliato e come posso eseguire il debug di questo ulteriore? Grazie!

+0

So che questa è una vecchia questione, ma se il sistema operativo è 64 bit quindi dovresti usare EmguCV x64 dll e se OS è a 32 bit, quindi dll di EmguCV x86. Non è così importante come si costruisce la soluzione, può facilmente creare come 'qualsiasi CPU'. – Edgar

risposta

9

Probabilmente non sta caricando le dipendenze DLL non gestite. Un paio di suggestoins:

  1. Assicurati che il tuo progetto .NET abbia come target x86 piuttosto che AnyCPU, poiché probabilmente hai la build x86 di OpenCV.
  2. Assicurarsi che le DLL OpenCV sono nel PATH (o direttamente nella directory bin, se questa è una console app/WinForms/WPF.)
+0

ya nella piattaforma target x86 .. e ho incluso le DLL opencv nella cartella di debug della directory bin, ma ancora dà lo stesso errore ... –

+1

Puoi interrompere il debugger quando viene lanciata l'eccezione? Potresti ottenere maggiori informazioni nei dettagli delle eccezioni lì. – jlew

+0

im nuovo a questo non so esattamente come rompere il debugger –

5

Copia e incolla tutte le DLL non gestite nella cartella bin la tua installazione EMGU su dove si trova il tuo file exe (cartella Release o Debug della cartella del tuo progetto).
Nel mio caso, DLL non gestite sono a "C: \ Emgu \ emgucv-windows-universale-CUDA 2.9.0.1922 \ bin \ x86"

+0

Nel mio caso, ho eseguito una compilazione pulita e cancellato ciò che era nella cartella bin. La reinstallazione ha ripristinato i file. Ecco che cosa è in lì per impostazione predefinita: concrt140.dll cvextern.dll msvcp140.dll opencv_ffmpeg330_64.dll vcruntime140.dll – Brian

2

si dovrebbe aggiungere la dipendenza dll nel progetto e il cambiamento 'copia alla directory di output 'proprietà 'copia sempre'(aggiungere -> elemento esistente) da Emgu \ emgucv-windows-universale-cuda 2.9.0.1922 \ bin \ x86

nel mio progetto del componente aggiuntivo: opencv_core290.dll, opencv_highgui290.dll, opencv_ffmpeg290.dll, opencv_imageproc290.dll e cudart32_55.dll

13

Ho avuto lo stesso problema. La mia eccezione interna era "Impossibile caricare DLL 'opencv_core290'".

è necessario copiare cartelle x86 e x64 da "yourEmguFolder/bin" per directory di output (bin) del progetto. Quindi crea nuovamente il progetto ed esegui.

Secondo emgu wiki

+0

Ragazzi questo è l'unico modo che ha funzionato per me, dopo diverse ore di tentativi !! Grazie Muhammed – Phoenician

+0

Questa soluzione funziona anche su server remoto. –

2

In primo luogo si deve aggiungere tre librerie al progetto. opencv_core290.dll, opencv_highgui290.dll, opencv_imgproc290.dll. Qui 290 riferisce che la tua versione opencv. Dopo tale modifica nella loro proprietà "Non copiare" su "copia sempre". di salvare il tuo progetto. Successivamente, vai nella seguente posizione. Se la macchina è a 64 bit che andare alla seguente cartella "C: \ Emgu \ emgucv-windows-universale-CUDA 2.9.0.1922 \ bin \ x64" o se la vostra utilizzando 32 bit OS di andare a "C: \ Emgu \ emgucv- windows-universali-CUDA 2.9.0.1922 \ bin \ x86" e copiare tutte le DLL nella cartella e incollare che nel vostro vostro progetto/bin/debug/cartella. di ricostruire il tuo progetto. Di quanto funzionerà bene.

Buona fortuna !!!!

0

Ho avuto lo stesso problema nella mia macchina a 32 bit per 3 giorni. Ho risolto questo problema semplicemente copiando tutte le DLL nella cartella system32 dalle cartelle bin e x86 e ha funzionato. Sembra che ci siano DLL che dipendono da altre DLL e nel momento in cui trasferisci tutto ciò che funziona. Non ho avuto il tempo di scoprire quale.

0

Per me problema è stato risolto facendo clic in Visual Studio:

Menu -> Progetto -> Proprietà -> Build -> Preferisco a 32 bit.

Deve essere stato un problema con emgu (probabilmente x86) e il mio OS x64).

1

Trovato questo su C#, VS 2017, emgu versione 3.2.0.2682

provato una semplice generazione su AnyCPU e ha ricevuto l'eccezione formato di male. Quindi ho provato l'eccezione per il formato errato x86 a causa di possibili suggerimenti nei commenti. Alla fine l'ho messo come x64 e ha funzionato bene.

0

si potrebbe utilizzare LD_LIBRARY_PATH per risolverlo:

  1. aprire l'avvertimento e controllare ciò che lib vostro programma manca

  2. individuare il percorso

    $ individuare # per trovare il percorso della libreria

  3. Nel proprio IDE, impostare la variabile di ambiente LD_LIBRARY_PATH sul percorso lib, (utilizzo mono sviluppare, il percorso viene eseguito -> Run With -> Parametri personalizzati ...)

funziona smettere di buon ora :)