2012-07-06 11 views
11

realmente un novato con EgmuCVEmguCV TypeInitializationException

trato de capturar imágenes de cámara web con el siguiente código:

//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(); 

     } 
    } 
} 

consigo el error siguiente:

enter image description here

i compruebe y tenga todos los DLL necesarios en la carpeta .exe

Respuesta

22

Después de experimentar este mismo problema por un tiempo, encontré que las instrucciones para resolver esto (TypeInitializer Exception) están incompletas.

  1. Para una aplicación básica, es necesario cvextern.dll, Emgu.CV.dll, Emgu.CV.UI.dll, Emgu.Util.dll en el directorio del .EXE.

  2. Se necesita un x86 (x64) dir en el directorio .exe y en el interior dir "x 86" que necesita 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 y cudart32_42_9.dll, npp32_42_9.dll, opencv_flann240.dll

La aplicación va a trabajar tan pronto como incluir todas las DLL necesarias .

+3

Para mí sólo copiar el ** ** cvextern.dll de 'C: \ Emgu \ emgucv-windows-universal 3.0.0.2157 \ bin \ x86' a '... \ Visual Studio 2013 \ Projects \ ScreenAnalyzer \ TestProject \ bin \ Debug' trabajado para deshacerse de la excepción. –

1

Otro caso que me sucedió fue que tenía un paquete NuGet que se instaló pero no se cargó para mi proyecto, por lo que las referencias se veían bien, pero en tiempo de ejecución obtuve la TypeInitializationException.

paquetes NuGet -Maneja

-cristales para gestionar en el paquete

-check la caja con el proyecto actual.

5

Estoy usando Emgu 3.0 de 64 bits y lo único que tengo que hacer para solucionar este problema es cambiar el tipo de compilación en mi proyecto a x64.

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

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

espero que ayude a alguien.

+0

3 días de golpear mi cabeza contra una pared resuelta. En VS 2013 Express, simplemente hice clic en "preferir 32 bits" en el objetivo de la plataforma y de repente comenzó a funcionar. Es bastante molesto que una opción "preferir" pueda causar tal problema. Muchas gracias de hecho. –

1

Este problema también ocurre si está utilizando una DLL de OpenCV compilada con compatibilidad para GPU, pero su PC no tiene una GPU, p. si está usando una computadora portátil con chipset de gráficos Intel.

En este caso se puede utilizar la versión anterior 2.4.0, que todavía ofrece DLL sin el apoyo de la GPU:

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

+0

Hola, ¿puedes describir cómo usar el emgucv 2.4 ... no puedo encontrar el dll en tu paquete recomendado? ¡Gracias! – tipura

+0

Las DLL están dentro del archivo ZIP vinculado en las carpetas '' bin/'' y '' bin/x64/'' para 32 bits y 64 bits, respectivamente.Lo más fácil es vincularlos a su proyecto y podrá acceder a los objetos 'Capture' y' ImageViewer' mencionados en la pregunta inicial. –

Cuestiones relacionadas