34

我有这个问题,我尝试cv2在 Python 上导入并收到以下错误消息。

>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: DLL load failed: %1 is not a valid Win32 application.

我确实了解有很多关于此的帖子,其中建议包的位数与 Python 包不同。

但是,我正在运行的所有内容都是 64 位的。我在 Windows 7 64 位,我有winpython 2.7.3.3,64 位分发,我用此处提供的指令编译了 64 位 OpenCV,并将 cv2.pyd DLL 文件放在 Lib/site-packages 文件夹中Python 解释器。

不幸的是,使用 32 位版本的 Python 的建议不再适用于我,因为我必须处理对于 32 位来说太大的 NumPy 数组。


唯一缺少的是将新的 NumPy 二进制文件路径 (C:\opencv\build\bin\Release) 添加到 Windows PATH 环境变量,重新启动 Python 解释器。

现在一切似乎都运行良好!

4

8 回答 8

28

由于对 Win32 的引用,ImportError 消息有点误导,而问题只是没有找到 OpenCV DLL。

通过将 OpenCV 二进制文件的路径添加到 Windows PATH 环境变量中解决了这个问题(例如,在我的计算机上,此路径为:C:\opencv\build\bin\Release)。

于 2013-07-23T21:06:49.007 回答
4

您可以尝试安装 32 位版本的 OpenCV。

于 2013-06-14T09:19:40.613 回答
3

我刚刚遇到了这个问题,问题是该软件包曾一度安装在每个用户的软件包目录中。(在 Windows 上。)又名 %AppData%\Python。所以 Python 首先查找那里,找到 .pyd 文件的旧 32 位版本,但由于列出的错误而失败。不幸的是, pip uninstall 本身不足以清除它,此时 pip 10.0.1 似乎没有用于卸载的 --user 参数,仅用于安装。

tl;dr 从 %AppData%\python\python27\site-packages 中删除旧的 .pyd 为我解决了这个问题。

于 2018-04-25T21:03:23.403 回答
2

或者您必须为 Windows 64 位重建 cv2 模块。

于 2013-11-20T04:05:53.447 回答
1

您所要做的就是将cv2.pyd文件从 x86 文件夹(例如C:\opencv\build\python\2.7\x86\)复制到C:\Python27\Lib\site-packages\,而不是从 x64文件夹。

于 2015-12-09T06:26:24.853 回答
1

Python版本混用时也会出现这个错误:

例如,如果要加载的任何 DLL 文件是使用 Python 2.7.16 编译的,并且您尝试使用 Python 2.7.15 导入,ImportError: DLL load failed: %1 is not a valid Win32 application.则会引发错误。

这至少是我发现的问题所在。

于 2020-01-21T15:59:12.200 回答
1

我遇到了与之前答案中提到的错误相同的错误,但仅在我使用pyinstaller.

我在我的诗歌 venv中做了以下事情:

poetry run python -m pip install pypiwin32

它对我有用。我在用

python                            3.8.10
pyinstaller                       4.7
# Those are the versions that worked for me
pypiwin32                         223
pywin32                           303
pywin32-ctypes                    0.2.0
于 2021-12-22T16:37:41.497 回答
0

当我遇到此错误时,在我的计算机崩溃并重新启动后它就消失了。尝试关闭并重新打开 IDE。如果这不起作用,请尝试重新启动计算机。当我收到此错误时,我刚刚安装了这些库而没有重新启动PyCharm 。

我从来没有先关闭 PyCharm 进行测试,因为我的破电脑总是随机崩溃......我正在研究那个,但它至少解决了这个问题......小胜利...... :)。

于 2015-09-08T03:01:54.120 回答