【解決方法】「emgu.cv.cvinvoke」の型初期化子が例外をスローしました。


x32ビットOSでは例外が生成されますが、x64ビットOSでは正常に動作するコードがあります:「’Emgu.CV.CvInvoke’の型初期化子が例外をスローしました。」

インターネットからのほぼ解決策に従いましたが、それでも問題は解決できませんでした。

アンマネージDLLを実行ファイルディレクトリに配置しようとしました。
ターゲットフレームワークx86をビルドしました。
DLLをc:\windows\system32に入れることも試しました。

ほぼすべての解決策。
デモプロジェクトもテストしましたが、依然として同じ問題が発生しています。
x64 ビット OS では完璧に動作しましたが、ランタイム例外「’Emgu.CV.CvInvoke’ の型初期化子が例外をスローしました。<」が発生します。 私が試したこと:

私はemgucvライブラリを使用して画像処理を行っています。 以前にemgu cvライブラリを使用しましたが、このエラーは一度も発生しませんでした。 インターネットの解決策やソースからほぼすべての解決策を試しました。
これがデモプロジェクトのサンプルコードです。

C#
private void Application_Idle(object sender, EventArgs e)
        {
            String FileName = @"E:\Demo\EmguCv-Histogram-01-master\S\ResizedImages\dblbig.jpg";
            Image<Bgr, Byte> InputImage;
            InputImage = new Image<Bgr, byte>(FileName);
            mainImage = InputImage; //webcamCapture.QueryFrame().ToImage<Bgr, Byte>();
            if (mainImage == null) return;
            processedImage = mainImage.InRange(new Bgr(120, 0, 0), new Bgr(256, 70, 70));
            processedImage = processedImage.SmoothGaussian(9);
            CircleF[] circles = processedImage.HoughCircles(new Gray(100), new Gray(50), 2, processedImage.Height / 4, 10, 400).SelectMany(u => u.Select(s => s)).ToArray();
            foreach (var c in circles)
            {
                if (txtLog.Text != "") txtLog.AppendText(Environment.NewLine);


                CvInvoke.Circle(mainImage, new Point((int)c.Center.X, (int)c.Center.Y), 3, new MCvScalar(0, 255, 0), -1, Emgu.CV.CvEnum.LineType.AntiAlias, 0);
                mainImage.Draw(c, new Bgr(Color.Red), 3);
            }
            imageBox1.Image = mainImage;
            imageBox2.Image = processedImage;

        }

解決策 1

OpenCV は 64 ビットまたは 32 ビットとしてビルドされます。 アプリケーションを 32 ビット プロセッサで実行しようとしている場合は、32 ビット DLL を追加する必要があります。 これ[^] 32 ビット バージョンをビルドする方法の詳細。

コメント

タイトルとURLをコピーしました