无法加载 DLL 'opencv_core242':找不到指定的模块。恩古简历

Posted

技术标签:

【中文标题】无法加载 DLL \'opencv_core242\':找不到指定的模块。恩古简历【英文标题】:Unable to load DLL 'opencv_core242': The specified module could not be found. Emgu CV无法加载 DLL 'opencv_core242':找不到指定的模块。恩古简历 【发布时间】:2012-12-02 06:25:29 【问题描述】:

我正在尝试开始使用 emgu CV open CV for C#。但我无法让它发挥作用。 我正在按照本指南使用 emgu CV Link 制作简单的程序,但出现以下错误:(知道我做错了什么吗?)

    System.TypeInitializationException was unhandled
      Message=The type initializer for 'Emgu.CV.CvInvoke' threw an exception.
      Source=Emgu.CV
      TypeName=Emgu.CV.CvInvoke
      StackTrace:
       at Emgu.CV.Image`2..ctor(String fileName) in c:\Emgu\emgucv-windows-x86-gpu 2.4.2.1777\Emgu.CV\Image.cs:line 144
       at TEST.Form1.button1_Click(Object sender, EventArgs e) in c:\documents and settings\laci\my documents\visual studio 2010\Projects\TEST\TEST\Form1.cs:line 28
       at System.Windows.Forms.Control.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ButtonBase.WndProc(Message& m)
       at System.Windows.Forms.Button.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form mainForm)
       at TEST.Program.Main() in c:\documents and settings\laci\my documents\visual studio 2010\Projects\TEST\TEST\Program.cs:line 18
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.DllNotFoundException
       Message=Unable to load DLL 'opencv_core242': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
       Source=Emgu.CV
       TypeName=""
       StackTrace:
            at Emgu.CV.CvInvoke.cvRedirectError(CvErrorCallback errorHandler, IntPtr userdata, IntPtr prevUserdata)
            at Emgu.CV.CvInvoke..cctor() in c:\Emgu\emgucv-windows-x86-gpu 2.4.2.1777\Emgu.CV\PInvoke\CvInvoke.cs:line 166
       InnerException: 

【问题讨论】:

你的代码是什么?你试过什么?要特别。 :( 不知道以可读的方式发布核心...但它是简单的代码从文件加载图像并单击按钮将其转换为另一种格式。 Emgu.CV.CvInvoke threw an exception的可能重复 【参考方案1】:

由于 Emgu.CV 只是一个 .NET 包装器(请参阅http://en.wikipedia.org/wiki/Wrapper_library),因此您需要将 OpenCV 的本机 .DLL 文件放在您的应用程序输出目录中。

可以在http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.2/OpenCV-2.4.2.exe/download下载对应版本的OpenCV找到需要的文件

【讨论】:

我确实将链接中提到的两个 dll 放在了我的应用程序输出目录中。 Laci,当一个 .DLL 还需要另一个 .DLL 时,您不会在错误消息中看到另一个 .DLL。例如,1.dll 需要 2.dll,而您的 C# 包装器使用 1.dll。错误信息将显示 1.dll 未找到,因为 1.dll 无法加载。因此,我建议您添加您认为 Emgu 使用的所有 OpenCV 的 .DLL 文件,并且在您的应用程序编译后,尝试删除未使用的文件,直到您只有所需的文件。祝你好运。 您还可以使用 DependencyWalker 找出丢失的 .DLL 文件。 看起来 OpenCV 不再托管 2.4.2 下载,但 EMGU 库仍然依赖于此?有人对获取 OpenCV 2.4.2 或迁移 EMGU 有什么建议吗? 以下关于将 nvcuda.dll 复制到 bin/ 目录的评论修复了我的运行时问题。我还需要基于我的平台的 EMGU libs/ 文件夹中的 DLL。【参考方案2】:

我会为大家节省很多时间。 对于 EMGU CV 版本 2.4.*,缺少的 dll 是“nvcuda.dll”,它不是 EMGU 二进制文件的一部分,但它通常位于 system32 文件夹中(也许你需要安装 nvidia 驱动程序,如果不只是在线查找 dll )

【讨论】:

正是在我的情况下。只需从sourceforge.net/projects/emguexample/files 下载 nvcuda.dll,然后按照说明将 nvcuda.dll 复制到您的工作目录(在我的情况下是 Debug 文件夹 - 我正在使用带有 Visual Studio 2012 的 Emgu CV)。【参考方案3】:

您可以通过在“opencv_core242.dll”上使用 Dependency Walker -> http://www.dependencywalker.com/ 来查找任何丢失的 DLL 来解决此问题。

对我来说,这表明我这里没有 tbb.dll 作为线程 tbb.dll not found

只需从https://www.threadingbuildingblocks.org/下载并将tbb*.dll复制到工作目录或“System32”就可以了

【讨论】:

【参考方案4】:

旧的,但我有同样的问题。事实证明 2.4.0 集成了 GPU,如果您没有 Nvidia 卡,则缺少 nvcuda.dll 并且 opencv_core242.dll 无法加载。尝试了一切,唯一的解决方案是回到 2.3.0 并且一切正常。

【讨论】:

【参考方案5】:

正如错误所述 - 它在您的应用程序的工作目录中找不到本机 DLL。确保将 opencv_core242.dll 库复制到应用程序的输出目录和工作目录。

【讨论】:

您确定它在 WORKING 目录中吗?您可以使用“Environment.WorkingDirectory”验证这一点。检查路径并检查该路径是否存在 DLL。【参考方案6】:

从http://www.dependencywalker.com/ 下载依赖walker 并打开声称未加载的.dll。然后查找依赖项,如果甚至您的系统文件夹(system32 或 syswow64)的应用程序目录中缺少一个或多个依赖项,那么它们需要在其中。

【讨论】:

【参考方案7】:

这里有解决问题的正确步骤。

访问:https://sourceforge.net/project/emgucv/emgucv/2.4.2/ 根据您的操作系统下载特定版本的 emgucv 2.4.2,例如对于 windows x86,您可以下载:libemgucv-windows-x86-gpu-2.4.2.1777.exe

在 C:\Emgu 之类的地方安装它 之后转到 C:\Emgu\emgucv-windows-x86-gpu 2.4.2.1777\bin\x86 并复制所有 opencv dll 文件并将其粘贴到您的应用程序 exe 输出目录中。

要删除不必要的 opencv dll 文件,请运行您的应用程序,然后按 ctrl+A 并尝试删除这些文件,您的应用程序使用的那些文件在您的应用程序运行时您将无法删除,它们是在使用中并且重置未使用的dll文件将被删除,除了你可以使用过时的依赖walker应用程序(http://www.dependencywalker.com/)可能会或可能不会工作

【讨论】:

以上是关于无法加载 DLL 'opencv_core242':找不到指定的模块。恩古简历的主要内容,如果未能解决你的问题,请参考以下文章

我无法使用 VS2010 运行 openCV2.3.1,因为未找到 opencv_core231d.dll

缺少 opencv_core248d.dll

无法定位序数242于动态链接库,Anaconda3Libraryinmkl_intel_thread

为啥我收到无法打开文件'opencv_core2411d.obj'

Qt Creator 链接器错误:LNK1104:无法打开文件“opencv_core249d.lib”

《安富莱嵌入式周报》第242期:2021.11.29--2021.12.05