2012-07-06 1 views
11

내가 다음 코드를 사용하여 웹캠에서 이미지를 캡처하려고 EmguCV TypeInitializationException

EgmuCV

와 난 정말 초보자 :

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

     } 
    } 
} 

내가 추적 오류 얻을 :

enter image description here

를 내가 확인하고 .exe 폴더에있는 모든 필요한 DLL을 가지고

답변

22

잠시 동안이 같은 문제가 발생하면 해결 방법 (TypeInitializer Exception)이 불완전하다는 것을 발견했습니다.

  1. 기본 응용 프로그램의 경우 .EXE 디렉토리에 cvextern.dll, Emgu.CV.dll, Emgu.CV.UI.dll, Emgu.Util.dll이 필요합니다. 당신이 필요한 모든 DLL을 포함로

  2. 당신은 당신이 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

앱이 곧 작동합니다

cudart32_42_9.dll, npp32_42_9.dll, opencv_flann240.dll을 필요로하는 .EXE 디렉토리 내부에 "86"디렉토리에서 디렉토리 x86 계열 (64)가 필요합니다 .

+3

그냥 ** cvextern.dll을 복사 ** : \ Emgu

이 경우 당신은 여전히 ​​GPU 지원없이 DLL을 제공 이전 버전 2.4.0을 사용할 수 있습니다 \ emgucv-windows-universal 3.0.0.2157 \ bin \ x86'을'... \ Visual Studio 2013 \ Projects \ ScreenAnalyzer \ TestProject \ bin \ Debug'에 추가하면 예외가 제거됩니다. –

1

나에게 일어난 또 다른 경우는 설치가되었지만 프로젝트에로드되지 않은 NuGet 패키지가있어서 참조가 좋게 보였지만 런타임에는 TypeInitializationException이 발생했습니다.

-manage NuGet 패키지

패키지 현재 프로젝트와 함께 상자 -check

에 관리 -clock.

5

Emgu 3.0 64 비트를 사용하고 있는데이 문제를 해결하려면 프로젝트를 x64로 빌드 유형을 변경해야합니다. http://www.codeproject.com/Articles/257502/Creating-Your-First-EMGU-Image-Processing-Project

가 누군가 도움이되기를 바랍니다에

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

을 참조하십시오.

+0

3 일 동안 벽을 치고 내 머리를 때렸다. VS 2013 Express에서 플랫폼 타겟에서 "32 비트 우선"을 클릭하기 만하면 갑자기 작동하기 시작했습니다. "선호하는"옵션이 그러한 문제를 일으킬 수 있다는 것을 상당히 성가 시게합니다. 참으로 대단히 감사합니다. –

1

이 문제는 GPU 지원으로 컴파일 된 OpenCV DLL을 사용하지만 PC에 GPU가없는 경우에도 발생합니다. 인텔 그래픽 칩셋이 장착 된 휴대용 컴퓨터를 사용하는 경우 C`에서 나를 위해

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

+0

안녕하세요, emgucv 2.4를 사용하는 방법을 설명해 주실 수 있습니까? 내가 권장 패키지에 DLL을 찾을 수 없습니까? 감사! – tipura

+0

DLL은 32 비트 및 64 비트 각각에 대해 "bin /"및 "bin/x64 /"폴더의 링크 된 ZIP 파일 내에 있습니다.가장 쉬운 방법은 모두 프로젝트에 연결하면 초기 질문에서 언급 한 'Capture'및 'ImageViewer'개체에 액세스 할 수 있습니다. –