导入 cv2 (opencv) 时出现“DLL 加载失败”

Posted

技术标签:

【中文标题】导入 cv2 (opencv) 时出现“DLL 加载失败”【英文标题】:"DLL load failed" when import cv2 (opencv) 【发布时间】:2019-02-20 07:28:40 【问题描述】:

在 [windows server 2012 R2 x64, python 3.7 64x]

pip install opencv-contrib-python

安装没有任何错误。 当我尝试导入它时

import cv2

告诉我这个错误:

Traceback (most recent call last):
  File "test.py", line 1, in <module>
    import cv2
  File "C:\Program Files\Python37\lib\site-packages\cv2\__init__.py", line 3, in
 <module>
    from .cv2 import *
ImportError: DLL load failed: The specified module could not be found.

我看到另一个关于此错误的主题,但他们的解决方案对我不起作用: - DLL load failed error when importing cv2 - Failure to import cv2 in python : DLL load failed - 以及here 中的很多页面 他们中的一些人说这个问题是因为 anaconda,而我什至没有 anaconda。很多人说问题32或64版本,我都试过了,失望。很多关于系统变量... 什么dll 加载失败?简历2?为什么?

我到现在为止的尝试:

更改python版本:86x和64x中的3.5、3.7、2.7(卸载完整的最后一个版本并删除程序文件中的所有剩余文件......然后安装新的)

尝试使用其他软件包,例如:opencv-python、opencv-contrib,尝试使用 .whl 安装特定版本(在某些主题中我读到了有关此的内容,因此请安装 numpy-1.14.5+mkl-cp37- cp37m-win_amd64.whlopencv_python-3.4.3+contrib-cp37-cp37m-win_amd64.whl 但没有任何变化)

在每次测试的 cv2 之前导入 numpy

安装 Microsoft Visual C++ 2015 Redistributable Update 3 , 2008 , 2010 , 2017 for 64x

更新接下来的 2 天

我尝试根据下面帖子中提到的 dependency walker 来管理丢失的 dll,下载所有 dll 并将它们放入系统 32,这是一个很好的线索,但不能解决问题。

第 4,5 天

我的下一步,尝试在我的机器上编译 OpenCV,安装 Visual Studio 2012 + cmake 并基于 document 编译 2 版本,64x 和 32,编译本身有很多问题(比如缺少一些来自 c lang 的 lib 和需要安装 Visual C++ Redistributable for Visual Studio 2012 ...) 我解决了所有这些问题,然后我有 2 个成功编译的版本,但两者都有相同的问题,缺少 dll,编译过程太慢了,给我 2 天的时间。所以如果这个任务失败了:/我正在寻找一种新的方式......

第 6 天

我的下一步是尝试使用 docker 在我的机器上运行 OpenCV(我尝试过,但 docker windows 只安装在 windows 10 和 windows server 2016 上)所以我寻找替代方案。我发现 Vagrant 可以像 docker 一样工作,但是今天我的时间花在了这篇文章上,这太棒了,docker 和 vagrant 的概念非常有吸引力,我玩这个就像我有新的谜题 :) 第一个错误显示在...上,无限错误继续:

第 7 天

Vagrant 测试也失败了,因为我的 windows server 2012 是一台 vb 机器(可视化服务器)并且不可能在另一个可视化框中运行可视化框! 所以我需要新的线索:

第 8-9 天

尝试使用 VMware 安装 vagrant,我下载了 VMware,不幸的是这个插件不是免费的(79 美元)所以我尝试使用 pythonanywhere.com,'让您可以访问已经安装了完整 Python 环境的机器。 ' 在这个免费帐户中,你不能用 urllib 打开url,还有更多限制...... 所以我想尝试自己在 VMware 中安装 ubuntu ......我下班后在这里阅读了结果。这是不可能的,原因相同vb(视觉框)

【问题讨论】:

See this question 您可以尝试将 .dll 文件添加到与 .pyd 文件相同的文件夹中吗?也许远程服务器没有检入 system32.dll? 【参考方案1】:

如果您使用的是 Windows 10 N 发行版,则可能会发生这种情况,N 发行版未预安装 Windows 媒体功能包,这是 OpenCV 3.4 版及更高版本之后所必需的。

首选的解决方案是将功能包安装在:https://www.microsoft.com/en-us/software-download/mediafeaturepack

请谨慎选择适用于您当前 Windows 版本的版本。

如果这不是一个选项,请回退到没有 dll 依赖项的较早版本的 OpenCV,您可以通过以下方式执行此操作:pip install opencv-python=3.3.0.9

自从windows推出N版以来,这个问题在很多地方都出现过,并且对windows环境有很多影响,确定你是否有这个问题的最快方法是在Edge浏览器中打开youtube,如果它显示html5媒体没有找到插件,就是这个问题。

2020 年 5 月更新:有一种安装适用于 Windows 10 N 的媒体包的新方法。

https://support.microsoft.com/en-us/help/4562569/media-feature-pack-for-windows-10-n-may-2020

【讨论】:

使用 pip 安装 opencv-python==3.3.0.9 对我有用,谢谢!我在 Windows 10 机器上使用 Anaconda 3、python 3.5.6。 非常感谢!经过无数小时的搜索,这是一个很好的答案。在 Windows 10 N 上,您需要安装媒体功能包。非常感谢! @AndrewThomas 它最初是在欧洲的非竞争法之后推出的,但我看到欧洲以外的一些组织采用它,因为它不包含英国媒体报道。 在尝试了以下所有选项之后(我没有尝试这个,因为我无法在 W2012-R2 上安装 mediafeaturepack,并且 opencv-python==3.3.0.9 没有安装在 Python 上3.7),唯一有效的是卸载 3.7,安装 python 3.6,THEN 运行 pip install opencv-python==3.3.0.9 截至 2020 年 5 月,这似乎是安装适用于 Windows 10 N 的媒体包的新方法。我有一个使用此答案的生产系统,但之后出现错误缺少 dll Windows 更新。这修复了它。 support.microsoft.com/en-us/help/4562569/…【参考方案2】:

我遇到了同样的错误(尽管我自己编译了 OpenCV),在我的情况下,缺少一些 DLL 依赖项。您可以使用程序Dependency Walker 进行检查。

下载Dependency Walker并运行,用Dependency Walker打开文件cv2.pyd,如果pip包安装正确,应该在C:\Program Files\Python37\lib\site-packages\cv2\

然后,该程序会扫描依赖项(这可能需要几分钟),然后以红色显示丢失的 DLL 文件。

【讨论】:

感谢您的回复,您的回答让我充满希望,我凌晨 4 点起床以测试您的建议,我下载了依赖行者并下载了所有警告(黄色)dll(不是 Ext.MS。*和 Api.MS.*) 并将它们放入 system32 ,但仍然无法正常工作。我不知道出了什么问题,我今天在 2 个本地系统中运行 opencv,它运行良好,但在我的远程服务器上不行。 此解决方案有效!但您需要将这些 .dll 文件添加到提到的文件夹 (...\lib\site-packages\cv2) 而不是 system32【参考方案3】:

我在 Windows Server 2012 r2 中遇到过类似的问题。经过大量发现,我发现缺少与 Window Media Service 相关的 mfplat.dll。

因此您必须手动安装功能,以便获得与窗口媒体服务相关的 dll。

    打开或关闭 Windows 功能 跳过角色屏幕,直接进入功能屏幕 在“用户界面和基础架构”下选择“桌面体验”

在此之后,opencv 所需的所有 dll 都将可用。

【讨论】:

我在 Windows Server 2012 R2 上遇到错误。这为我节省了大量时间。谢谢!虽然,不得不重启服务器。【参考方案4】:

Python 3.7 可能不支持某些模块。

尝试安装python 3.6.4 使用命令提示符“pip install opencv”或“pip install opencv-python” 导入 cv2

【讨论】:

谢谢你!我遇到了同样的问题,降级到 3.6.4 对我有用。但是你认为他们什么时候能解决这个问题?【参考方案5】:

您可以尝试卸载 opencv 并使用 wheel 文件安装它吗? Here 是一个为 windows 编译了许多版本的 OpenCV 的网站,搜索你需要的并使用 pip 命令安装它。

因此,如果您有 Python 3.6(64 位)并希望安装 OpenCV 3.4.3,请下载 wheel 文件: opencv_python‑3.4.3‑cp36‑cp36m‑win_amd64.whl

【讨论】:

我测试了其中的近 10 个!但缺少的 dll 都适用于所有这些。【参考方案6】:

我有类似的问题,除了我使用的是 Anaconda3 并且这里的代码解决了它:

conda install -c anaconda py-OpenCV

【讨论】:

【参考方案7】:

经过 15 天的头脑风暴,这个解决方案对我有用。我相信它也对你有用。我安装了 anaconda 以使用 OpenCV 3.1.0。我遵循以下步骤:

1) 我已经安装了使用 python 3.7 的 anaconda-5.3 64 位安装程序 (614.3 MB)。你可以从链接下载anaconda:https://www.anaconda.com/download/#windows

2) 安装 anaconda 后,在 Windows 开始按钮上键入“anaconda prompt”打开 anaconda prompt。使用“以管理员身份运行”打开。

3) 您必须创建新环境才能安装和使用 OpenCV 模块。编写以下命令来创建和激活新环境:&gt;conda create --name myNewEnv python=3.5.0&gt;activate myNewEnv “myNewEnv”是新环境的名称。

4)现在你需要安装OpenCV的先决条件,即numpy,然后安装opencv3。在执行以下命令之前启动互联网:&gt;conda install numpy&gt;conda install anaconda-client&gt;conda install --channel https://conda.anaconda.org/menpo opencv3

5)OpenCV3 已安装。现在,通过执行以下命令来验证安装:(myNewEnv) C:\Users\Nilesh&gt; python&gt;&gt;&gt;import cv2&gt;&gt;&gt;cv2.__version__

如果您想第二次启动 OpenCV3,请按照以下步骤操作:

1) 使用“以管理员身份运行”权限从开始菜单打开“anaconda 命令提示符” 2) 输入命令 >activate your_new_environment_name 3) 假设您要运行位于桌面上的文件,为此编写以下命令:&gt; cd C:\Users\Nilesh\Desktop 4) 现在您的工作目录是 Desktop。 5) 键入以下命令以运行任何代码(例如 test.py)。&gt; python test.py 注意:这里,python 表示版本 3。

我希望这个解决方案对你有用。

【讨论】:

【参考方案8】:

我在 Windows Server 2012 R2 x64 上遇到了同样的问题。我正在使用 PyInstaller 创建可执行文件并在运行时出错:

ImportError: DLL load failed: The specified module could not be found.

安装“Visual C++ redistributable”2015 并启用“Media Foundation”功能后,我的问题得到解决。

文档中有更多信息:OpenCV Documentation

【讨论】:

【参考方案9】:

我在 Windows 上遇到了这个问题。我通过检查说明 here 解决了这个错误。

问:在 Windows 上导入失败:ImportError: DLL load failed: 找不到指定的模块?

答:如果在 Windows 上导入失败,请确保您有 Visual C++ redistributable 2015 已安装。 如果您使用的是比 Windows 10 更旧的 Windows 版本并且未安装最新的系统更新,则可能还需要 Universal C Runtime。

Windows N 和 KN 版本不包括 OpenCV 所需的媒体功能包。如果您使用的是 Windows N 或 KN 版本,请同时安装Windows Media Feature Pack

【讨论】:

【参考方案10】:

在阅读了大量答案和文章后,我遇到了同样的问题“DLL 加载失败”。

我不知道这是否适合您,但请尝试一下。

我使用的工具和版本:anaconda - 5.3.1、python - 3.7、win 10(64 位)

我执行的步骤:

step1:我从here安装了opencv 3.4.4 然后解压到C盘(你可以随心所欲)

step2:将 cv2.pyd 文件从 [C:\opencv\build\python\cv2\python-3.7] 复制到 [C:\Users\"user-name"\Anaconda3\ Lib\site-packages] 在这里。

step3:运行dependency walker来检测哪些dll文件丢失, 在我的例子中运行依赖walker后,它显示两个dll文件没有加载,它们是(1)OPENCV_WORLD344.DLL和(2)IESHIMS.DLL。 我不知道你的情况,但你可以这样做-> 使用依赖 walker 查找文件名,然后找到它们的路径并按照步骤 4。

step4:打开系统属性->高级->环境变量,现在编辑路径并添加 C:\opencv\build\x64\vc14\bin (在我的情况下,这是 OPENCV_WORLD344 .DLL 被存储),然后在 python 中导入 cv2。

如果我的回答不起作用,请添加评论。

【讨论】:

【参考方案11】:

我遇到了同样的问题。我通过降级 open cv 解决了这个错误。

pip install opencv-python==3.3.0.9

【讨论】:

【参考方案12】:

对我来说效果很好。* 答案是需要将 cv2.pyd 文件放到您的虚拟环境中。 需要放在envs的两个文件夹下,

first 在 DLLS 文件夹下,并且 第二个在Lib/site-packages下

获取 cv2.pyd > 从此链接下载https://sourceforge.net/projects/opencvlibrary/ 然后解压下载文件

您将获得 opencv 文件夹,然后进入 opencv 文件夹,如 Downloads\opencv\build\python\2.7 并进入更深的文件夹,具体取决于您的 32 或 64 窗口版本

复制 cv2.pyd 重要 **** 将 cv2.pyd 文件复制到您的环境后,您需要将 cv2.pyd 重命名为 _cv2.pyd

【讨论】:

【参考方案13】:

它对我有帮助 pip install opencv-contrib-python Anaconda Prompt,python 3.7.1 cv2 4.1.1

【讨论】:

【参考方案14】:

我在 Windows Server 2008R2 全新安装时遇到了这个问题,花了将近一天的时间才解决,就像尝试了许多点击和试验一样,最终我在互联网的某个地方找到了解决方案(不是 ***)

安装 Windows Media Feature Pack for 2008R2 然后安装服务器管理器-> 功能-> 添加功能-> 桌面体验 服务器管理器->功能->添加功能->桌面体验 以及墨水和手写服务。

除了检查清单还包括

Visual C++ 可再发行版 2015 通用 C 运行时

希望它有助于节省时间

【讨论】:

【参考方案15】:

安装 Python 3.6 版,然后使用以下命令安装 opencvpip install opencv-python==3.3.0.9 为我解决了这个问题

【讨论】:

【参考方案16】:

您只需要 python 3.6。 过去 3 天我一直在寻找解决方案,当我安装 python 3.6.7 时我的问题得到了解决。 安装 python 3.6 后,您可以简单地运行 pip install opencv-python。 来源:https://www.geeksforgeeks.org/setup-opencv-with-pycharm-environment/

【讨论】:

【参考方案17】:

刚刚遇到了可以从我的 conda 环境导入的 cv2 问题,但不是通过 jupyter 中的“相同”环境。我得到的错误是它无法加载 dll。

此外,我无法通过 jupyter 安装 opencv,即使使用:

import sys
!conda install --yes --prefix sys.prefix numpy

我使用以下方法检查了我的路径:

import os
os.path

在我的 shell 和 jupyter 中。他们是一样的(!)。

我终于可以通过运行命令来让事情正常进行:

conda install nb_conda

在我的 conda 环境中,如下所述:https://github.com/udacity/P1_Facial_Keypoints/issues/13

这令人大开眼界,因为它创建了与我的环境而不是 anaconda 相关联的新安装的 jupyter 笔记本,在创建页面时有五个(!)环境可供选择。有三个似乎与我的 conda 环境有关。有趣的是,现在在 jupyter(与 env 关联的那个)中再次创建新笔记本时,它只显示一个命名环境作为选项,但它成功导入了 cv2。

详细了解为什么 jupyter 会发生这种情况: https://jakevdp.github.io/blog/2017/12/05/installing-python-packages-from-jupyter/

【讨论】:

以上是关于导入 cv2 (opencv) 时出现“DLL 加载失败”的主要内容,如果未能解决你的问题,请参考以下文章

导入opencv时出现Python3重新链接问题

在另一台笔记本电脑上使用 CV2 程序时出现路径错误

opencv和python下,运行对图片的读取程序时出现的问题!!!

尝试查找棋盘角时出现opencv python错误

导入 cv2:importError:dlopen... 原因:找不到图像

CV2:尝试拍照时出现“[WARN:0] terminating async callback”