我正在尝试在EmguCV 3.1中运行LicensePlateRecognition的示例。但我总是得到错误System.DllNotFoundException,并且消息是“无法加载cvextern.dll”。我使用Visual Studio 2013运行Windows 7(计算机由我公司提供)。
我将文件夹中的所述dll和其他一些dll复制到debug文件夹(配置文件设置为调试模式,我尝试了x86和x64版本)。在一次又一次地收到错误后,我开始怀疑这是因为我的视频卡驱动程序(一些谷歌搜索结果如此)。我更新了,错误仍然存在。
经过一些谷歌搜索,我找到了依赖步行者。缺少一个文件“IEShims.dll”。我下载并将其放入调试文件夹中,但没有运气。
我认为有些输出可能是相关的。
从C:\ Emgu \ emgucv-windesktop 3.1.0.2282 \ bin \ x64
加载打开的cv二进制文件LoadLibraryEx C:\ Emgu \ emgucv-windesktop 3.1.0.2282 \ bin \ x64 \ opencv_ffmpeg310_64.dll失败,错误代码为87:参数不正确。
无法加载文件C:\ Emgu \ emgucv-windesktop 3.1.0.2282 \ bin \ x64 \ opencv_ffmpeg310_64.dll。
LoadLibraryEx C:\ Emgu \ emgucv-windesktop 3.1.0.2282 \ bin \ x64 \ cvextern.dll失败,错误代码为87:参数不正确。
无法加载文件C:\ Emgu \ emgucv-windesktop 3.1.0.2282 \ bin \ x64 \ cvextern.dll。
有谁知道这有什么问题?
错误似乎源于
#if !UNITY_IPHONE
//Use the custom error handler
RedirectError(CvErrorHandlerThrowException, IntPtr.Zero, IntPtr.Zero);
#endif
方法
/// <summary>
/// Attempts to load opencv modules from the specific location
/// </summary>
/// <param name="modules">The names of opencv modules. e.g. "opencv_cxcore.dll" on windows.</param>
/// <returns>True if all the modules has been loaded successfully</returns>
public static bool DefaultLoadUnmanagedModules(String[] modules)
我尝试了一整天才找到解决方案,但我真的不知道我现在能做什么。任何帮助表示赞赏。
编辑:我也没试过TlbImp。TlbImp:错误TI1002:输入文件“D:\ Resources \ cvextern.dll”不是有效的类型库。
答案 0 :(得分:8)
在将项目从Emgu 3.1.0.2282升级到3.1.0.2504-r16.12时遇到类似问题后我找到了这个页面
在我的情况下,这是因为我的Win10计算机没有安装Visual C++ Redistributable for Visual Studio 2015。
更具体地说,在Emgu 3.1.0.2282中,&#34; x86&#34;和&#34; x64&#34;包含msvcr120.dll
和msvcp120.dll
的文件夹,而在3.1.0.2504中,这些文件夹现在包含vcruntime140.dll
和msvcp140.dll
。
更改日志或安装说明中没有提到新依赖项,并且没有迹象表明cvextern.dll由于可视化C运行时而失败 - 只有错误bin\Debug\x64\cvextern.dll failed with error code 126: The specified module could not be found
我不需要复制DLL文件来解决这个问题:我的bin目录只包含Emgu.CV.UI
和Emgu.CV.World
DLL文件,以及&#34; x86&#34;和&#34; x64&#34;文件夹(每个包含4个DLL)。我提到这一点是为了引导人们远离谷歌将提出的所有建议,这些建议适用于旧版本的Emgu。
答案 1 :(得分:1)
我遇到了和你一样的问题。我写了一个基于EmguCV3.1的应用程序。它在我的开发PC上运行良好,但是一旦我将发布版本复制到另一台PC而没有安装任何开发工具,我就得到了错误。测试PC系统环境是Windows 7 64位。
最后,我发现只需将emgucv安装目录中的所有.dll文件复制到您的发布文件夹中,例如:D:\ Emgu \ emgucv-windesktop 3.1.0.2282 \ bin \ x64或bin / x86。这些DLL包括cvextern.dll,msvcp120.dll,msvcr120.dll,opencvffmpeg310.dll。对于64位系统,我从bin \ 64文件夹中复制dll。
根据您的情况,我建议您将bin \ x64或bin \ x86文件夹目录添加到系统路径环境中。
参考:
EmguCV official wiki about this problem但是没有必要为版本3.1添加这么多dll。
And Try to check your configuration of emgucv as wiki said:
对于3.0+版本,所需的vcrt dll包含在&#34; x86&#34;和&#34; x64&#34;夹。只要您复制&#34; x86&#34;中的所有非托管dll,您就会做好准备。和&#34; x64&#34;文件夹到可执行文件夹。
答案 2 :(得分:1)
由于目标计算机上缺少C ++运行时文件,因此发生错误。它们可以是downloaded并从Microsoft安装。
答案 3 :(得分:0)
我遇到的另一个问题(与cvextern
无法加载相同的症状)在Windows Server上运行(在Azure云中)是对Windows Media Foundation的依赖。对于它的价值,默认情况下不会在Windows Server 2012上安装。有几种补救措施:
答案 4 :(得分:0)
从 4.2 版开始,所有内容都包含在 NuGet 中: https://www.nuget.org/packages/Emgu.CV.runtime.windows/
如果您选择 x86 或 x64(不是 AnyCPU),则会部署 DLL。