最近有一个作业,要用到OpenCV,并且要在.NET平台下进行,我准备用Emgu + C#去写,以前没接触过OpenCV的开发,在安装和配置上遇到了问题,烦请大家解答一下,问题是这样的:我从http://sourceforge.net/上下载了Emgu CV的3个相关文件:
Emgu.CV.SourceAndExamples-1.4.0.0.zip
Emgu.CV.Windows.Binary-1.4.0.0.zip
以及文档把Emgu.CV.SourceAndExamples-1.4.0.0.zip解压出来的文件夹src放在了D:\Program Files\OpenCV下
把Emgu.CV.Windows.Binary-1.4.0.0.zip中解压出来的文件夹重命名为Emgu,也放在了D:\Program Files\OpenCV下,并且把这两个文件夹都设置到了Path里,在项目中我把Emgu文件夹下所有的dll都添加到了引用里,写了一段代码(附1)进行测试,结果出现了"Emgu.CV.CvInvoke的类型初始值设定项引发异常",我想应该是DLL的问题,我又把src下的DLL都复制到了System32下,还是不行,又复制到了项目目录下,还是不行.我看了一下异常的详细信息,Message显示"无法加载cxcore110.dll",但是我在CMD下任意目录下直接输入cxcore110.dll,都可以用VS打开.我觉得可能还是我的DLL设置里存在一些问题,但是自己实在是搞不清楚了,麻烦大家给解答一下.谢谢.
这个项目我是在Visual Studio 2008下进行的.附1:我的测试代码using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Emgu.CV;
using Emgu.CV.UI;namespace OpenCV_Cell {
    class Program {
        static void Main (string[] args) {
            Image<Bgr,Byte> image;
            image = new Image<Bgr, Byte> (640, 480);  //在这一行引发了异常
        }
    }
}
附2:"Emgu.CV.CvInvoke的类型初始值设定项引发异常"的详细信息: 
未处理 System.TypeInitializationException 
  Message="“Emgu.CV.CvInvoke”的类型初始值设定项引发异常。" 
  Source="Emgu.CV" 
  TypeName="Emgu.CV.CvInvoke" 
  StackTrace: 
      在 Emgu.CV.CvInvoke.cvCreateImageHeader(MCvSize size, IPL_DEPTH depth, Int32 channels) 
      在 Emgu.CV.Image`2.AllocateData(Int32 rows, Int32 cols) 
      在 Emgu.CV.Image`2..ctor(Int32 width, Int32 height) 
      在 OpenCV_Cell.Program.Main(String[] args) 位置 E:\My Documents\Visual Studio 2008\Projects\OpenCV_Cell\OpenCV_Cell\Program.cs:行号 12 
      在 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) 
      在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
      在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
      在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
      在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
      在 System.Threading.ThreadHelper.ThreadStart() 
  InnerException: System.DllNotFoundException 
      Message="无法加载 DLL“cxcore110.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。" 
      Source="Emgu.CV" 
      TypeName="" 
      StackTrace: 
            在 Emgu.CV.CvInvoke.cvRedirectError(CvErrorCallback errorHandler, IntPtr userdata, IntPtr prevUserdata) 
            在 Emgu.CV.CvInvoke..cctor() 
      InnerException: 

解决方案 »

  1.   

      不知道楼主搞定这个问题没有, 我今天第一次用emgu cv, 也是这个问题,build ok, 但是execute
    后报错说unable to load dll cxcore110.dll,还不知道怎么解决...
      

  2.   


    呵呵,我今天上CSDN,看见我这个帖子有人回,以为解决问题的方法有了呢,原来你也是这样的问题啊,我没解决呢,解决了也通知你一下^_^
      

  3.   


    终于搞定了!到下面去下载Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)这个包安装。
    http://www.microsoft.com/downloads/thankyou.aspx?familyId=200b2fd9-ae1a-4a14-984d-389c36f85647&displayLang=en#
    我的QQ285826592,以后多交流哈
      

  4.   


    那请问 using Emgu.CV.Structure;这个程序集不存在 怎么解决?
      

  5.   

    我也遇到了这个问题,不过是在opencvpre1.1下碰到的。
    按照官方的方法,甚至重新编译了库,都无济于事。于是搜索了一下cxcore110.dll文件。
    我发现opencv pre1.1的bin目录下已经存在了cxcore110.dll 和 msvcp80.dll(某些论坛上好像说需下载这个)
    只要在window的系统变量Path里添加到 opencv的安装目录下bin 的路径即可。(这个就不用我说怎么设置了吧:)
    另外,设置好后,vs2005需要重新启动一下。
    虽然emgu cv没有使用过,我想,这其中似乎也有点关联吧。希望对luzhu有用。
      

  6.   

    楼上说的我试过了,vs2008,可行——只要在window的系统变量Path里添加到 opencv的安装目录下bin 的路径。
      

  7.   

    我的path变量已经有目录是SQL的,怕改了会影响SQL server的应用