web-dev-qa-db-ja.com

'Emgu.CV.CvInvoke'の型初期化子が例外をスローしました

このエラーが発生しています

'Emgu.CV.CvInvoke'のタイプ初期化子が例外をスローしました。

emgu CVを使用しようとしたとき。私はこれを修正するために考えられるすべてのものを試しましたが、それでも同じエラーが発生し、ボタンをクリックすると表示されます

オブジェクト参照がオブジェクトインスタンスに設定されていません。

これは私が試しているコードです:

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

私は何を間違っていたのでしょうか?これをさらにデバッグするにはどうすればよいですか?ありがとう!

14
Dilshan Zuhdi

私も同じ問題を抱えていました。私の内部の例外は「DLL 'opencv_core290'」をロードできません」でした。

「yourEmguFolder/bin」からプロジェクトのoutput(bin)ディレクトリにx86およびx64フォルダーをコピーする必要があります。次に、プロジェクトを再度ビルドして実行します。

emgu wiki によると

14

アンマネージDLL=依存関係の読み込みに失敗している可能性があります。いくつかの提案:

  1. OpenCVのx86ビルドを使用している可能性があるため、.NETプロジェクトがAnyCPUではなくx86をターゲットにしていることを確認してください。
  2. OpenCV dllがPATHにあることを確認してください(または、これがConsole/WinForms/WPFアプリの場合は、binディレクトリに直接あります)。
9
jlew

EMGUインストールのbinフォルダーにあるすべての管理されていないdllをコピーして、exeファイルがある場所(プロジェクトフォルダーのリリースまたはデバッグフォルダー)に貼り付けます。
私の場合、管理されていないdllは「C:\ Emgu\emgucv-windows-universal-cuda 2.9.0.1922\bin\x86」にあります

5
Subodha Charles

最初に、プロジェクトに3つのライブラリを追加する必要があります。 opencv_core290.dll、opencv_highgui290.dll、opencv_imgproc290.dll。ここでは290はあなたのopencvバージョンを指します。その後、プロパティを「コピーしない」から「常にコピーする」に変更します。プロジェクトを保存するよりも。その後、次の場所に行きます。マシンが64ビットの場合は、次のフォルダー「C:\ Emgu\emgucv-windows-universal-cuda 2.9.0.1922\bin\x64」に移動するか、32ビットOSを使用する場合は「C:\ Emgu\emgucv- windows-universal-cuda 2.9.0.1922\bin\x86 "およびそのフォルダー内のすべてのdllをコピーして、Project/bin/debug /フォルダーに貼り付けます。プロジェクトを再構築するよりも。それよりもうまくいきます。

幸運を祈ります!!!!

2
Mohamed Masrooj

依存関係DLLをプロジェクトに追加し、「出力ディレクトリにコピー」プロパティをEmgu\emgucv-windows-universal-cuda 2.9.0.1922\binから「常にコピー」(追加->既存の項目)に変更する必要があります\ x86

私のプロジェクトに追加:opencv_core290.dll、opencv_highgui290.dll、opencv_ffmpeg290.dll、opencv_imageproc290.dllおよびcudart32_55.dll

2
keyvan moazami

32ビットマシンでも同じ問題が3日間発生しました。すべてのdllをbinおよびx86フォルダーからsystem32フォルダーにコピーするだけでこれを解決しました。他のdllに依存するdllがあり、それをすべて転送した瞬間に機能するようです。どれを探すか時間がありませんでした。

1
Mannu

これはc#、VS 2017、emguバージョン3.2.0.2682で見つかりました

AnyCPUで単純なビルドを試行し、不正なフォーマット例外を受け取りました。コメントで提案の可能性があるため、x86の不正なフォーマット例外を試しました。最後に、私はそれをx64として置き、それはうまくいきました。

1
mark deacon

私にとっては、Visual Studioをクリックして問題を解決しました:

メニュー->プロジェクト->プロパティ->ビルド-> 32ビット優先。

Emgu(おそらくx86)と私のOS x64)の問題だったに違いありません。

0
tamsiv

LD_LIBRARY_PATHを使用して解決できます:

  1. 警告を開いて、プログラムにないlibを確認します

  2. パスを見つける

    $ Locate#はライブラリパスを検索します

  3. IDEで、環境変数LD_LIBRARY_PATHをlibパスに設定します(私はmonodevelopを使用しています。パスはRun-> Run With-> Custom Parameters ...です)。

それは今すぐうまくいきます:)

0
Jackey Huo

Windows Serverで機能しない場合は、UIデスクトップエクスペリエンスを有効にする必要があります。

投稿を表示できます

0
Hello World