7

我正在尝试开始使用 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: 
4

7 回答 7

9

由于 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找到需要的文件

于 2012-12-14T09:10:02.627 回答
3

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

于 2014-10-07T13:26:31.557 回答
1

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

对我来说,它表明我没有 tbb.dll 作为 Thread here tbb.dll not found

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

于 2014-03-04T18:51:54.430 回答
1

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

于 2014-03-20T21:18:13.700 回答
0

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

于 2012-12-14T09:07:08.000 回答
0

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

于 2014-04-28T06:06:23.027 回答
0

这是解决问题的正确步骤。

访问: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/)可能会或可能不会工作
于 2019-08-01T11:40:24.630 回答