无法加载DLL文件'opencv_core290'

3
在我的winforms应用程序中,我需要使用一些Emgu.CV库(我已经安装了Emgu 2.9)。
问题是我遇到了以下错误:
System.TypeInitializationException was unhandled
     HResult=-2146233036
     Message=The type initializer for 'Emgu.CV.OCR.Tesseract' threw an exception.
     Source=Emgu.CV.OCR
     TypeName=Emgu.CV.OCR.Tesseract
     StackTrace:
         at Emgu.CV.OCR.Tesseract..ctor(String dataPath, String language, OcrEngineMode mode)
         at ANPR.LicensePlateDetector..ctor(String dataPath) in c:\Users\blabla\Visual Studio 2012\Projects\ANPR\ANPR\LicensePlateDetector.cs:line 30
         at ANPR.Form1..ctor() in c:\Users\blabla\Visual Studio 2012\Projects\ANPR\ANPR\Form1.cs:line 22

   InnerException: System.TypeInitializationException
   HResult=-2146233036
   Message=The type initializer for 'Emgu.CV.CvInvoke' threw an exception.
   Source=Emgu.CV
   TypeName=Emgu.CV.CvInvoke
   StackTrace:
        at Emgu.CV.CvInvoke.CV_MAKETYPE(Int32 depth, Int32 cn)
        at Emgu.CV.OCR.Tesseract..cctor() in c:\Emgu\emgucv-windows-universal-cuda 2.9.0.1922\Emgu.CV.OCR\Tesseract.cs:line 26

   InnerException: System.DllNotFoundException
        HResult=-2146233052
        Message=Unable to load DLL 'opencv_core290': 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-universal-cuda 2.9.0.1922\Emgu.CV\PInvoke\CvInvoke.cs:line 266

当尝试实例化一个新的Tesseract对象时,就会出现这种情况:
var tesseract = new Tesseract("", "eng", Tesseract.OcrEngineMode.OEM_TESSERACT_CUBE_COMBINED);

由于引用“opencv_core290”无效,我尝试了这里提供的解决方法。基本上,我将.dll文件复制到我的项目中,通过使用“添加现有资源”将其添加,并将其属性修改为“始终复制”。然而,这并没有起作用。感谢任何帮助!


你确定你的dll文件和exe文件在“bin”文件夹中是相邻的吗? - Ahmet Kakıcı
@AhmetKakıcı 已经进行了双重检查 - Mirel Vlad
你的问题类似于:https://dev59.com/kGzXa4cB1Zd3GeqPPxRe#13875590,这就是我问的原因。 - Ahmet Kakıcı
这并没有太大帮助 :( - Mirel Vlad
1
这个链接会很有帮助:http://fewtutorials.bravesites.com/entries/emgu-cv-c/-emgu-cv-invoke-threw-an-exception-solution - diyoda_
3个回答

9
我也遇到了这个问题。你应该将“yourEmguFolder/bin”文件夹中的DLL文件复制到项目的输出目录中的x86或x64文件夹中。然后重新构建项目并运行。
我按照EMGU WIKI页面上的描述解决了这个问题。

但是当您发布项目时该怎么办呢?在哪里放置这些非托管的 DLL 文件? - user1718530
这是一种“蛮力”解决方案,因为您不需要所有文件,但达到目标加1。 - chouaib

8

确切地说,opencv的dll文件应该位于你的应用程序bin\debug或者bin\release文件夹中。你需要关心的主要是,x64和x86 dlls的文件夹结构应该保持原样。

也就是说,将emgu\bin文件夹中的x86和x64文件夹一起复制到应用程序的debug文件夹中。

发布时 - 将这两个文件夹添加到你的VS项目中,然后将它们的属性设置为"始终复制",这将自动处理文件夹结构。

我也遇到了同样的问题,这个解决方案对我有用。


1

当我添加opencv_core290.dll,opencv_highgui290.dll和opencv_imgproc290.dll时, 我遇到了以下相同的问题:

System.DllNotFoundException: 无法加载 DLL 'opencv_core290':找不到指定的模块。 (HRESULT 异常:0x8007007E) at Emgu.CV.CvInvoke.cvRedirectError(CvErrorCallback errorHandler, IntPtr userdata, IntPtr prevUserdata)

在解决了这个问题之后,我添加了一个名为cudart64_55.dll的dll文件,并解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接