ImportError DLL load failed: %1 不是有效的 Win32 应用程序
在使用Pycharm进行opencv的学习过程中,遇到了导入cv2包之后报错的问题,而且一般是出现在 使用了 xfearures2d 模块的时候
这些错误一般是有两种形式:
- 主要内容是 ImportError DLL load failed: %1 不是有效的 Win32 应用程序
- 大概内容是 module ‘cv2.cv2’ has no attribute ‘xfeatures2d’
这两种情况其实都是由于同一种情况引起的:版本问题
比如按照我的版本来说,我的Python 是3.7.1的新版本,当然在学习到opencv(以下简称cv)的时候,我也下载了最新版本的4.0.0.21 最初的时候,我去网上搜索一些解决方法的时候,会看到很多人说,是由于Python和cv的版本不配套,但是,我更换了几个cv版本之后问题照样存在,也有的说是Python的版本不对,我有更换了几次Python的版本,问题还是没解决。最终我是在Git-hub上面找cv官方对于使用者的一些回答的时候发现了最终的解决方案。
确实是cv版本不对,但不是网上有人说的和Python版本不配套的问题,而是cv版本过高的问题!一开始我也有点诧异,以前从来是听说什么什么版本过低引发问题,这次竟然是过高。而事实就是这样,因为cv官方在某个时候申请了这个算法的专利,所以 xfeatures2d 已经不能随便用了。
那么,最重要的,解决方案如下:
-
不仅要下载opencv-python,还要下载一个opencv-contrib-python:
1.1 如果你是Pycharm,直接在file-settings里面下载即可;
1.2 如果是其他的,其实都可以在CMD里下载,首先要有pip,然后就可以执行下面两端代码:1.2.1 pip install opencv-python ==3.4.2.16
1.2.2 pip install opencv-contrib-python == 3.4.2.16 -
要求这两个包的版本是3.4.2.16;
-
重现启动软件,比如说我的是Pycharm;
-
完成工作,解决问题;