web-dev-qa-db-ja.com

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

必要なすべてのdllを.exeフォルダーに確認して持っています

13
rkmax

これと同じ問題をしばらく経験した後、これを解決するための手順( TypeInitializer Exception )が不完全であることがわかりました。

  1. 基本的なアプリの場合、.EXEのディレクトリにcvextern.dll, Emgu.CV.dll, Emgu.CV.UI.dll, Emgu.Util.dllが必要です。

  2. .exeディレクトリにx86(x64)ディレクトリが必要であり、「x86」ディレクトリ内に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が必要です。

必要なDLLをすべて含めると、アプリはすぐに機能します。

22
rkmax

私はEmgu3.0 64ビットを使用していますが、この問題を修正するために必要なのは、プロジェクトのビルドタイプをx64に変更することだけです。

プロジェクトの名前->プロパティ->ビルド->プラットフォームターゲット->x64

http://www.codeproject.com/Articles/257502/Creating-Your-First-EMGU-Image-Processing-Project を参照してください

それが誰かを助けることを願っています。

5
fian

この問題は、GPUサポートでコンパイルされたOpenCV DLLを使用しているが、PCにGPUがない場合、たとえばIntelグラフィックチップセットを搭載したポータブルコンピューターを使用している場合にも発生します。

この場合、GPUサポートなしでDLLを提供する古いバージョン2.4.0を使用できます:

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

1
Jack Miller

私に起こった別のケースは、インストールされているがプロジェクト用にロードされていないNuGetパッケージがあるため、参照は良好に見えましたが、実行時にTypeInitializationExceptionが発生しました。

-NuGetパッケージを管理する

-パッケージの時計管理

-現在のプロジェクトのチェックボックスをオンにします。

1
Denis

64ビットOSを使用している場合は、x64フォルダーからcvextern.dllファイルをコピーしてから、プロジェクトのdebugフォルダーにコピーするだけです。

注: "既存のアイテムを追加"はコピーしないため、手動で実行してください。

0
Prakash Sharma