【问题标题】:'Emgu.CV.CvInvoke error on face recognition test using emgu'Emgu.CV.CvInvoke 使用 emgu 进行人脸识别测试时出错
【发布时间】:2025-11-26 08:25:02
【问题描述】:

我有点碰壁了

基本上,我只是尝试设置一个简单的程序,该程序将获取网络摄像头供稿并检查其是否有人脸,如果是这样,则启动一个偶数(随着时间的推移,我会变得更加复杂)

我已经看到了几个使用 EMGU 进行人脸识别的例子(没有一个有效),所以我认为我在正确的树上吠叫,但是当我看到代码时

var cap = new Capture(0);

我得到一个 'Emgu.CV.CvInvoke

所以我添加了适当的(至少我认为)引用 dll 并添加了 using 语句,我只是不知道还能做什么。

显然我错过了什么。

我不确定分享我的整个项目的最佳方式是什么(我愿意接受建议),但有人知道在 c# express 2010 中编译的工作示例吗?或者有包含要添加哪些文件的教程?

谢谢

【问题讨论】:

  • 请更具体地说明您遇到的问题。当你说“我得到一个`Emgu.CV.CvInvoke”时你是什么意思?这是编译时错误(换句话说,您无法编译项目)还是运行时错误?如果是运行时,这是异常还是其他原因。
  • 另外,请指定项目类型(ASP.NET Web 应用程序、WinForms 桌面应用程序、WPF 桌面应用程序等)
  • 我得到调试和运行时错误

标签: c# invoke emgucv


【解决方案1】:

如果您关注 EmguCV wiki,您应该会发现运行代码没有问题:

http://www.emgu.com/wiki/index.php/Download_And_Installation

您的 bin 文件夹中似乎没有复制 opencv dll

[更新] 你能试着调试一下这个简单的代码并告诉我你的结果是什么吗?

using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Emgu.CV.UI;
using System.Drawing;

...

using (Image<Bgr, Byte> img = new Image<Bgr, byte>(400, 200, new Bgr(255, 0, 0))) 
{
   MCvFont f = new MCvFont(CvEnum.FONT.CV_FONT_HERSHEY_COMPLEX, 1.0, 1.0);

   img.Draw("Hello, Stack Overflow", ref f, new Point(10, 80), new Bgr(0, 255, 0)); 

   //Show the image using ImageViewer from Emgu.CV.UI
   ImageViewer viewer = new ImageViewer(img, "Stack Test");
   viewer.ShowDialog();
}

【讨论】:

  • 今晚我会试一试,如果可行,请将其标记为答案。我有点不清楚,我认为将它们添加为具有正确路径的引用就足够了。
  • 添加了适当的 dll(我认为),但现在我执行命令时不会给我一个错误 var cap = new Capture(0);调试器进入代码,然后我可以继续前进)程序没有挂起,但我无法退出或查看它试图执行的代码
  • 是否有可能在 c# 中获得一个工作项目文件我从该站点获得的示例在 c# express 中无法编译
  • 您应该检查的另一件事是您已经为您的架构引用了正确的 dll。为了更安全,如果您引用了 x86 dll,请打开您的项目属性并将“构建”选项卡下的“平台目标”从“任何 CPU”更改为“X86”。
  • 我看到了,是的,我正在做一个 x86 构建。我在项目中包含以下 dll,我还需要将它们全部添加为参考吗? opencv_video220.dll,opencv_core220.dll,opencv_imgproc220.dll,opencv_gpu220.dll,opencv_objdetect220.dll,opencv_features2d220.dll,opencv_flann220.dll,opencv_contrib220.dll,opencv_highgui220.dll,opencv_ml220.dll,opencv_ffmpeg23d220.dll,opencv_calibcv.dll dll
【解决方案2】:

在仔细检查你的 dll 之后,你似乎没有复制 cvextern.dll !!!

【讨论】:

  • 我回家后试试这个
  • 没关系,我发现它现在针对 3.5,但我仍然没有得到你给我执行的代码
  • 正如我在之前的评论中所说的,如果你按照你告诉我的那样复制了所有的 dll 并检查了目标框架,那么你似乎还没有安装 MSVCRT 9.0 SP1!!! microsoft.com/downloads/en/…
  • @Luca:请不要对一个问题发布多个答案。编辑您的原始答案或将您的答案作为评论发布(在这种情况下似乎更合适)。
【解决方案3】:

添加 cvextern.dll,以及您需要复制到输出文件夹的另一个 dll,作为 dll 的链接,然后转到该链接的属性,然后在高级属性中,将 CopyToOutputDirectory 值设置为“如果较新”或“始终复制”。 要添加为链接,当您添加现有项目时,添加按钮右侧是一个指向下方的箭头,单击它会出现“添加为链接”选项。

【讨论】:

  • 它们被设置为不复制我将它们全部更改为始终复制但仍然没有骰子
  • 奇怪,它应该已将 dll 的副本添加到您的调试/发布文件夹中。
最近更新 更多