在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。但是它包含在可执行文件的文件夹中?!?答案 0 :(得分:0)
好的,明白了。我下载了最新版本3.3.0 - 然而在这个版本中 - 有问题的文件只有4.8 MB。
解决方案是,回到版本3.2.0.2682 - 这里,文件cvextern.dll
有13.1 MB!现在,一切正常!