无法在c#项目中加载cvextern

时间:2011-11-06 16:37:33

标签: c# dll emgucv

我正在尝试调试我的程序,在c#中使用emgu和HaarCascade。 我得到一个例外:

  

无法加载DLL'cvextern':找不到指定的模块。 (HRESULT异常:0x8007007E)

我已将文件cvextern.dll添加到我的项目中,并尝试在文件属性上“复制始终”和“复制如果更新”选项。此外,构建在平台x64中。

这部分是我写的:

    private void Load_Click(object sender, EventArgs e)
    {
        OpenFileDialog dlg = new OpenFileDialog();
        dlg.Filter = "Photo Files (*.jpg)|*.JPG";
        dlg.CheckFileExists = true;
        if (dlg.ShowDialog() == DialogResult.OK)
        {
            Image<Bgr, Byte> My_Image = new Image<Bgr, byte>(dlg.FileName);
            HaarCascade face = new HaarCascade("haarcascade_frontalface_alt.xml");

,例外是在最后一行。

8 个答案:

答案 0 :(得分:21)

你收到的错误不仅仅是cvextern这个dll实际上指向几乎所有其他opencv dll而且都是必需的。出现此错误,您需要在项目中使用以下dll。

请注意,“220”是根据更新而更改的版本号。

  • cudart64_32_16.dll
  • cufft64_32_16.dll
  • cvextern.dll
  • npp64_32_16.dll
  • opencv_calib3d220.dll
  • opencv_contrib220.dll
  • opencv_core220.dll
  • opencv_features2d220.dll
  • opencv_flann220.dll
  • opencv_gpu220.dll
  • opencv_highgui220.dll
  • opencv_imgproc220.dll
  • opencv_legacy220.dll
  • opencv_ml220.dll
  • opencv_objdetect220.dll
  • opencv_video220.dll

我在codeproject here的文章中提到了这个错误。

任何其他问题让我知道,

干杯,

克里斯

答案 1 :(得分:9)

只需安装:this nuget package

因为有一些非托管代码,所以您必须在项目中添加这些引用

请参见ChangeLog

答案 2 :(得分:8)

Emgu CV 3.1突然出现了这个错误,我在这个问题上找到了以下工作解决方案:

复制应用程序目录cvextern.dll

中的\bin\Debug\

希望这有帮助。

答案 3 :(得分:1)

对于版本2.3,它的列表随着opencv_ffmpeg.dll和opencv_flann231.dll而增加。

答案 4 :(得分:1)

cvextern.dll应该在Windows \ System32中用于x86,而Windows \ SysWOW64用于x64 它为我工作。 ps:我使用的是NuGet Package&#39; EmguCV&#39; v3.1.0.1与VS2015

答案 5 :(得分:1)

我通过以下方式解决了这个问题:

  • 右键单击项目名称,选择“添加”,然后选择“添加现有项”。然后选择Emgu \ libs \ x64文件夹中的所有文件添加到项目中(如果需要,可以替换旧文件)。
  • 然后,您需要选择所有新添加的文件,右键单击并选择“属性”,在“复制到输出”部分中,选择“始终复制”。

完成了。

答案 6 :(得分:0)

我遇到此错误的问题是VS2015在32位IIS Express中运行Web项目。修复是为了确保它使用64位IIS Express

我在启动时添加了此代码,以便在设置新计算机时提醒自己

if (IntPtr.Size != 8)
{
     throw new Exception("Change VS options to ensure 64bit IIS Express");
}

答案 7 :(得分:0)

在我的情况下,我已经切换到64目标而没有注意到,去x86让它消失了