类型为#System; TypeInitializationException'的未处理异常发生在Emgu.CV.World.dll中

时间:2018-01-04 13:25:02

标签: c# opencv emgucv typeinitializeexception

在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.dlls复制到可执行文件的文件夹中 - 但我仍然发现这条消息。而另一方面,将所有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

的路径

问候并感谢你, 扬

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

enter image description here

1 个答案:

答案 0 :(得分:0)

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

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