C# '的类型初始值设定项;Emgu.CV.CV';抛出异常
我犯了这个错误 “Emgu.CV.CvInvoke”的类型初始值设定项引发异常 当我尝试使用Emgu CV时。我已经尝试了所有我能想到的方法来解决这个问题,但它仍然会给出相同的错误,当我点击一个按钮时,它会显示出来 对象引用未设置为对象的实例 这是我正在尝试的代码:C# '的类型初始值设定项;Emgu.CV.CV';抛出异常,c#,emgucv,C#,Emgucv,我犯了这个错误 “Emgu.CV.CvInvoke”的类型初始值设定项引发异常 当我尝试使用Emgu CV时。我已经尝试了所有我能想到的方法来解决这个问题,但它仍然会给出相同的错误,当我点击一个按钮时,它会显示出来 对象引用未设置为对象的实例 这是我正在尝试的代码: void ProcessFunction(object sender, EventArgs e) { imgOrg = capturecam.QueryFrame(); if (imgOrg == null) ret
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;
}
我可能做错了什么,如何进一步调试?谢谢 它可能无法加载非托管DLL依赖项。有几点建议:
将EMGU安装的bin文件夹中的所有非托管DLL复制并粘贴到exe文件所在的位置(项目文件夹的Release或Debug文件夹)
在我的例子中,非托管dll位于“C:\Emgu\emgucv windows universal cuda 2.9.0.1922\bin\x86”您应该将依赖项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我也遇到了同样的问题。我的内部异常是“无法加载DLL‘opencv_core290’” 您需要将x86和x64文件夹从“yourEmguFolder/bin”复制到项目的输出(bin)目录。然后再次构建项目并运行
根据的规定,首先您必须向项目中添加三个库。 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位操作系统,请转到“C:\Emgu\emgucv windows universal cuda 2.9.0.1922\bin\x86”,复制该文件夹中的所有DLL并将其粘贴到项目/bin/debug/文件夹中。而不是重建你的项目。这样就行了
祝你好运 我在我的32位机器上连续3天出现同样的问题。我通过简单地将所有DLL从bin和x86文件夹复制到system32文件夹中解决了这个问题,并且成功了。看起来有一些DLL依赖于其他DLL,并且在您传输所有DLL的那一刻就可以正常工作。我没有时间找出哪一个。对于我来说,通过在Visual Studio中单击解决了问题: 菜单->项目->属性->构建->首选32位 这一定是emgu(可能是x86)和我的操作系统x64的问题。在c#上发现的,与2017年的emgu版本3.2.0.2682相比 尝试在AnyCPU上进行简单构建,但收到错误格式异常。
所以我尝试了x86坏格式异常,因为评论中可能有建议。最后,我把它设为x64,它工作得很好。您可以使用
LD\u LIBRARY\u PATH
来解决它:
LD_LIBRARY_PATH
设置为lib路径(我使用monodevelop,路径为Run-->使用-->自定义参数运行…)它现在可以正常工作了:)如果它在Windows Server上无法工作,则必须启用UI桌面体验
安装此nuget:解决了我的问题,看起来手动dll复制已通过此软件包解决。ya在其平台目标x86中。。我已经将opencv DLL包含到bin目录调试文件夹中,但它仍然会给出相同的错误…当抛出异常时,您可以中断调试器吗?您可能会在那里的异常详细信息中获得更多信息。我不知道如何在Visual Studio中中断调试程序:调试|异常…|公共语言运行时异常|[Checked]ThrownGuys这是我经过几个小时的尝试后唯一有效的方法!!感谢MuhammedI我知道这是一个老问题,但是如果您的操作系统是64位的,那么您应该使用EmguCV x64 DLL,如果操作系统是32位的,那么应该使用EmguCV x86 DLL。如何构建解决方案并不重要,它可以轻松构建为“任何CPU”。下载Emgu.cv的nuget和windows运行时在我的情况下,我完成了一个干净的构建,它清除了bin文件夹中的内容。重新安装还原的文件。这里是默认情况下的内容:concrt140.dll cvextern.dll msvcp140.dll opencv\u ffmpeg330\u 64.dll vcruntime140.dllI有两个文件运行时windows(x86)、vc\u redist 2005->2017(x86和x64)和.net 4.8。但有些电脑工作,有些抛出异常。你有没有遗漏什么?