Emgu.CV.World.dll中出现未处理的“System.TypeInitializationException”类型异常

问题描述 投票:0回答:1

在Visual Studio 2015中使用Emgu.CV,我有一个简单的函数来将位图加载到Emgu.CV.Mat onject。

    static Emgu.CV.Mat BitmapToMat(System.Drawing.Bitmap Bmp)
    {
        int stride = 0;

        System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, Bmp.Width, Bmp.Height);
        System.Drawing.Imaging.BitmapData bmpData = Bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, Bmp.PixelFormat);

        System.Drawing.Imaging.PixelFormat pf = Bmp.PixelFormat;
        if (pf == System.Drawing.Imaging.PixelFormat.Format32bppArgb)
        {
            stride = Bmp.Width * 4;
        }
        else
        {
            stride = Bmp.Width * 3;
        }

        /*Exception thrown in next line...*/
        Emgu.CV.Image<Emgu.CV.Structure.Bgra, byte> cvImage = new Emgu.CV.Image<Emgu.CV.Structure.Bgra, byte>(Bmp.Width, Bmp.Height, stride, (IntPtr)bmpData.Scan0); 

        Bmp.UnlockBits(bmpData);

        return cvImage.Mat;
    }

An unhandled exception of type 'System.TypeInitializationException' occurred in Emgu.CV.World.dll

在互联网上找到这么多的视频和提示,如果我在x64库中使用x64,我必须要小心,我必须将所有的cvxxx.dll复制到可执行文件的文件夹中 - 但我还是这个消息发生。另一方面,将所有dll复制到此文件夹意味着复制大约500 MB - 这不可能,如果我只想创建一个Emgu.CV.Mat对象。

我的印象是,很多人都不知道他们到底做了什么。

我从这里下载了这个库:https://sourceforge.net/projects/emgucv/files/emgucv/3.3/

我选择了第一个名为libemgucv-windesktop_x64-cuda-3.3.0.2826.zip.selfextract.exe的文件

任何人都可以解释我,为什么我会得到这个错误,如何在不盲目处理所有库的情况下修复它。

我还定义了路径,其中存储了Emgu的dll(x64文件夹)到我的环境变量Path

关心并感谢你,Jan

编辑:我有进一步的信息。执行编译的可执行文件,我收到消息,他找不到cvextern.dll。但它包含在可执行文件的文件夹中?!?

enter image description here

c# opencv emgucv typeinitializeexception
1个回答
0
投票

好的,我知道了。我下载了最新版本3.3.0 - 然而在这个版本中 - 有问题的文件只有4.8 MB。

解决方案是,回到版本3.2.0.2682 - 在这里,文件cvextern.dllhas 13.1 MB!现在,一切正常!

© www.soinside.com 2019 - 2024. All rights reserved.