1

我一直在从事一个有趣的编码项目,它使用 emguCV 以及 C# 和 .NET 。我遇到的问题是尝试在我的代码中初始化 Capture() 类。每次我尝试初始化 Capture 时都会引发异常:

    The Type initializer for 'Emgu.CV.CvInvoke' threw an Exception
    Exception type: System.InitializationException from Emgu.CV.dll

这是我的 C# 代码:

class Vision
{
    private Capture cap;
    private HaarCascade haar;
    private Form1 form;

    public Vision()
    {
            form = new Form1();
            cap = new Capture();
            haar = new HaarCascade("C:\\haarcascade_frontalface_alt2.xml");
    }
    public void faceDetect()
    {
        using(Image<Bgr, Byte> nextFrame = cap.QueryFrame())
        {
            if(nextFrame != null)
            {
                Image<Gray, Byte> grayframe = nextFrame.Convert<Gray, Byte>();
                var faces = grayframe.DetectHaarCascade(haar, 1.4, 4, HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(nextFrame.Width / 8, nextFrame.Height / 8))[0];
                foreach(var face in faces)
                {
                    nextFrame.Draw(face.rect, new Bgr(0, double.MaxValue, 0), 1);
                }
                form.setImage(nextFrame.ToBitmap());
            }
        }
    }
}

代码参考如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Emgu.CV;
    using Emgu.Util;
    using Emgu.CV.Structure;
    using Emgu.CV.CvEnum;
    using System.Drawing;

每次发生异常时,它都会显示在 cap = new Capture();

我还尝试将 Capture 类的相机索引设置为 0,1,2 ......并且也没有运气。我还想也许是因为我在 Mac 上运行 Windows,所以它没有检测到网络摄像头,但后来我确实下载了最新的 Windows 驱动程序来访问摄像头。我感谢所有提前提供帮助的人!:-)

4

3 回答 3

0

如果您使用的是 x64 机器,则需要更改项目设置。转到项目设置 -> 构建 -> 目标平台 -> x64。更多细节在这里:http ://www.emgu.com/wiki/index.php/Setting_up_EMGU_C_Sharp

于 2014-08-23T23:04:45.580 回答
0

当非托管 DLL 依赖项无法加载时,可能会发生这种情况。尝试以下操作:

  1. 确保您使用的是 EmguCV 的正确版本,即如果您在 x86 模式下构建解决方案,您应该拥有 EmguCV 的 x86 版本,x64 版本也是如此。

  2. 确保 OpenCV DLL 在您的 PATH 中(或直接在 bin 目录中,如果这是 Console/WinForms/WPF 应用程序。)

您可以在此处找到操作方法。

也可以参考官方文档here

于 2013-10-07T11:28:24.983 回答
0

对于 EmguCV 的第一个用户来说,这是一个非常“经典”的错误,所以不用担心,很容易解决!

您需要为您的 Visual Studio 版本安装 MSVCRT。此外,可能是您没有使用“如果较新则复制”将 DLL 文件放入项目中。

查看官方 emguCV 网站上的所有详细信息

于 2013-10-07T12:15:37.777 回答