无法在 c# 项目中加载 cvextern
Posted
技术标签:
【中文标题】无法在 c# 项目中加载 cvextern【英文标题】:unable to load cvextern in a c# project 【发布时间】:2011-12-23 03:11:15 【问题描述】:我正在尝试调试我的程序,在 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");
异常在最后一行。
【问题讨论】:
【参考方案1】:您收到的错误不仅仅是 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 上的文章中与其他错误一起介绍了此错误。
如果有其他问题,请告诉我,
干杯,
克里斯
【讨论】:
我刚刚下载了 OpenCv 版本 2.4.10,我找不到文件 cudart64_32_16.dll、cufft64_32_16.dll、cvextern.dll 和 npp64_32_16.dll。这些还需要吗?如果是这样,它们不在 build > x86 > vc12 > bin 中。我在哪里可以找到它们? 我真的需要在目标机器上安装所有这些 dll,只为了在 emgu.world 中运行一个简单的功能吗?我怎么知道需要哪一个?【参考方案2】:这个错误出现在我身边Emgu CV 3.1
,我为这个问题找到了以下可行的解决方案:
将cvextern.dll
复制到应用程序目录\bin\Debug\
希望这会有所帮助。
【讨论】:
此问题仅在创建 dll 而不是 .exe 的 Windows 窗体用户控件项目中使用 Emgu 时出现。使用 Emgu 的 Windows 窗体应用程序在同一台机器上运行良好。我通过将 cvextern.dll 从只需安装:this nuget package
因为有一些非托管代码,你必须在你的项目中添加这些引用
见ChangeLog
【讨论】:
【参考方案4】:对于 x86,cvextern.dll 应该在 Windows\System32 和对于 x64 的 Windows\SysWOW64 这对我有用。 ps:我在 VS2015 中使用了 NuGet 包 'EmguCV' v3.1.0.1
【讨论】:
【参考方案5】:我已经解决了这个问题,作者:
右键单击项目名称,选择添加,选择添加现有。然后选择 Emgu\libs\x64 文件夹中的所有文件以添加到项目中(如果询问,允许替换旧文件)。 然后你需要选择所有新添加的文件,右键选择属性,在复制到输出部分,选择总是复制。完成了。
【讨论】:
【参考方案6】:对于 2.3 版,它的列表随着 opencv_ffmpeg.dll 和 opencv_flann231.dll 的增加而增加。
【讨论】:
【参考方案7】:目标可能需要指定为 x64 或 x86。
来自 Emgu 在其 GitHub 上的帖子的详细信息:
如果您以 .Net Framework 为目标,则需要以“x64”或“x86”为目标。如果您的目标是“.Net Core”或“.Net 5”,您可以定位“AnyCPU”。详情可以在这里找到:https://www.emgu.com/wiki/index.php/Download_And_Installation#Targeting_.Net_Framework
【讨论】:
【参考方案8】:我的问题是 VS2015 在 32 位 IIS Express 中运行 Web 项目。修复是为了确保它使用 64 位 IIS Express
我在启动时添加了这段代码,以在设置新机器时提醒自己
if (IntPtr.Size != 8)
throw new Exception("Change VS options to ensure 64bit IIS Express");
【讨论】:
【参考方案9】:在我的情况下,我已经切换到 64 目标并且没有注意到,转到 x86 让这个消失了
【讨论】:
【参考方案10】:您可以通过在 Visual Studio 2019 中使用 Nuget 包管理器安装它来解决此问题工具> NuGet 包管理器 > 包管理器控制台
然后用这个安装
安装包 Emgu.CV 安装包 Emgu.CV.runtime.windows对我来说一切都很好。
【讨论】:
以上是关于无法在 c# 项目中加载 cvextern的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Vista x64 的 C# 应用程序中加载 C++ DLL
在 Android 中加载动态项目时无法将页脚视图添加到列表视图