2012-07-06 13 views
11

ho davvero un novizio con EgmuCVEmguCV TypeInitializationException

cerco di catturare immagini da webcam con il seguente codice:

//Program.cs (Winform) 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

using Emgu.CV; 
using Emgu.CV.UI; 
using Emgu.Util; 
using Emgu.CV.Structure; 

namespace EgmuCVTest 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Capture cp = new Capture(); 
      ImageViewer imv = new ImageViewer(); 

      Application.Idle += new EventHandler(delegate(object s, EventArgs ea) 
      { 
       imv.Image = cp.QueryFrame(); 
      }); 

      imv.ShowDialog(); 

     } 
    } 
} 

ottengo l'errore seguente:

enter image description here

i controllare e avere tutte le DLL necessarie nella cartella .exe

risposta

22

Dopo aver riscontrato questo stesso problema per un po ', ho trovato che le istruzioni per risolvere questo problema (TypeInitializer Exception) non sono complete.

  1. per un'applicazione di base, è necessario cvextern.dll, Emgu.CV.dll, Emgu.CV.UI.dll, Emgu.Util.dll nella directory del file exe.

  2. Hai bisogno di un x86 (x64) dir nella directory exe e dentro dir "x86" è necessario opencv_calib3dXXX.dll, opencv_contribXXX.dll, opencv_coreXXX.dll, opencv_features2dXXX.dll, opencv_highguiXXX.dll, opencv_imgprocXXX.dll, opencv_legacyXXX.dll, opencv_mlXXX.dll, opencv_objectdetectXXX.dll, opencv_videoXXX.dll e cudart32_42_9.dll, npp32_42_9.dll, opencv_flann240.dll

L'applicazione funzionerà non appena si includono tutte le DLL necessarie .

+3

Per me semplicemente copiando il ** ** cvextern.dll da 'C: \ Emgu \ emgucv-windows-universal 3.0.0.2157 \ bin \ x86' a '... \ Visual Studio 2013 \ Projects \ ScreenAnalyzer \ TestProject \ bin \ Debug' ha funzionato per eliminare l'eccezione. –

1

Un altro caso che è successo a me è stato che avevo un pacchetto NuGet che è stato installato ma non caricato per il mio progetto, quindi i riferimenti sembravano buoni ma in fase di esecuzione, ho ricevuto il TypeInitializationException.

pacchetti Nuget -Gestisci

-Orologio gestire sul pacchetto

-verificare il dialogo con il progetto corrente.

5

Sto usando Emgu 3.0 a 64 bit e l'unica cosa che devo fare per risolvere questo problema è cambiare il tipo di build nel mio progetto in x64.

Right click on your project's name ->Properties ->Build ->Platform Target ->x64

riferiscono a http://www.codeproject.com/Articles/257502/Creating-Your-First-EMGU-Image-Processing-Project

spero che aiuta qualcuno.

+0

3 giorni di battere la mia testa contro un muro risolto. In VS 2013 Express, ho appena fatto clic su "Preferisci 32 bit" in Platform Target e all'improvviso ha iniziato a funzionare. Piuttosto fastidioso che un'opzione "preferisci" possa causare un tale problema. Molte grazie. –

1

Questo problema si verifica anche se si utilizza DLL OpenCV compilata con supporto GPU ma il PC non ha una GPU, ad es. se si utilizza un computer portatile con chipset grafico Intel.

In questo caso è possibile utilizzare la versione precedente 2.4.0, che offre ancora DLL senza supporto GPU:

https://sourceforge.net/projects/emgucv/files/emgucv/2.4.0/libemgucv-windows-x64-2.4.0.1717.zip

+0

Ciao, puoi descrivere come usare emgucv 2.4 .. Non riesco a trovare la DLL nel pacchetto consigliato? Grazie! – tipura

+0

Le DLL sono all'interno del file ZIP collegato nelle cartelle '' bin/'' e '' bin/x64/'' per 32 bit e 64 bit, rispettivamente.Più facile, collega tutti loro al tuo progetto e sarai in grado di accedere agli oggetti 'Capture' e' ImageViewer' menzionati nella domanda iniziale. –

Problemi correlati