OpenCV安装成功,但是无法导入 cv2 的指定模块 -- Ubuntu Anaconda 环境

OpenCV安装成功,但是无法导入 cv2 的指定模块 -- Ubuntu Anaconda 环境,第1张

文章目录
  • 1. 问题
  • 2. 分析
  • 3.解决
  • 4. 其它尝试

1. 问题

OpenCV安装成功,但是无法导入 cv2 的指定模块 – Ubuntu Anaconda 环境,具体是安装好 opencv-python 4.1.0.25 后,准备导入模块 cv2.ximgproc.guideFilter 时,仍然报错,

ModuleNotFoundError: No module named ‘cv2.ximgproc’

并且已经安装好 opencv-contrib-python 4.1.0.25 。

2. 分析

在翻阅别人的博客,大概都是认为问题出在了 安装了多个版本的 opencv-python 和 opencv-contrib-python,CV2的库冲突,其中 opencv-contrib-python 是 opencv-python 的拓展版本,有opencv 的一些附加功能,是对 opencv 的补充。

他们的解决方案大致是先将所有的 opencv-python 和 opencv-contrib-python 先卸载,再只安装 opencv-contrib-python 和 opencv-python ,就可以解决他们的问题。

pip uninstall opencv-contrib-python opencv-python

注意,这里安装的 opencv-contrib-python 和 opencv-python 一般是你所需的指定版本,一般先安装 opencv-python,再安装 opencv-contrib-python。一般使用 pip install XXX 安装,conda install XXX 只能安装 opencv-python ,无法安装 opencv-contrib-python 。

pip install opencv-contrib-python==4.1.0.25

或者

pip install opencv-python==4.1.0.25
pip install opencv-contrib-python==4.1.0.25

但是在我创建的 conda 虚拟环境中,这种方法依旧没能解决问题。即使使用 conda list 查看已经安装好了指定版本的 opencv-python 和 opencv-contrib-python,依据无法导入需要的模块 cv2.ximgproc.guideFilter 。

其中,模块 cv2.ximgproc.guideFilter 用于导向滤波。

参考链接:
1
2
3

3.解决

有博客认为:pip 安装和 conda 安装的 python 依赖包有不匹配的地方,所以建议采用离线的方式安装 opencv-python 和 opencv-contrib-python 的 .whl 文件 。

首先在卸载完成 opencv-python 和 opencv-contrib-python 以后,去 opencv 的镜像文件网站下载我们需要的版本,在 https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/opencv-python/ 下载所需的 opencv-contrib-python ,在 https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/opencv-python/ 下载所需的 opencv-python ,



再离线安装,

pip install /home/xxx/opencv_contrib_python-4.1.0.25-cp36-cp36m-manylinux1_x86_64.whl
pip install /home/xxx/opencv_python-4.1.0.25-cp36-cp36m-manylinux1_x86_64.whl

其中要注意的是 cp36 表示 python 环境是 3.6 版本,manyliunx 表示系统平台内核是基于 liunx 。

很遗憾,这种方法依旧还是未能成功导入模块。在我创建的 conda 虚拟环境中,即使使用 conda list 查看,显示已经安装好了指定版本的 opencv-python 和 opencv-contrib-python,依据无法导入需要的模块 cv2.ximgproc.guideFilter 。

最后发现了问题所在,创建的虚拟环境下对应的 opencv-python 和 opencv-contrib-python 安装包文件夹下竟然基本是空,和其它依赖包文件夹中 .py 文件相比几乎没有。

先定位 opencv-python 依赖包安装的文件夹,

pip show opencv-python

显示自己创建的虚拟换环境中,opencv-python 所在的安装路径为
/home/XXX/anaconda3/envs/自己创建的虚拟环境名/python3.6/site-packages/cv2/

这说明,表面上使用 conda list 显示是 安装了 opencv-python,但是实际上并没有安装好。我知道 conda 是可以直接复制虚拟环境进行抑制的,于是我直接在之前安装过 opencv-python 和 opencv-contrib-python 的另外的虚拟环境中复制了opencv-python 和 opencv-contrib-python 的安装文件到我现在需要的用虚拟环境中,解决了我遇到的问题,我知道这种解决方式指标不治本,没有找到更好的解决方法,比如 一条类似 pip install XXX 的指令就解决我上面遇到的问题。希望路过的大佬能帮我指出问题的根本所在,这样可以让遇到了和我一样问题的其他人能少浪费时间。

我现在个人感觉问题出还是出在pip 安装和 conda 安装的 python 依赖包有不匹配的地方,尽管离线方式安装也没成功。

本文所用 conda 版本是 4.5.11

conda --version
4. 其它尝试

看到有别的博客是通过直接在 opencv 的 Github 上面源码安装,我这里没试,感觉很麻烦,大家可以试试能不能行。

另外,重新创建了一个虚拟环境,只安装 opencv-python 和 opencv-contrib-python,也是不行,在相关依赖包的安装文件夹下是空的,没有相关的 .py 文件。

最后我再试一试使用 conda install XXX 命令,能否安装上。


在创建的新的虚拟环境下,conda 命令安装 opencv

conda install -c https://conda.anaconda.org/menpo opencv3

或者安装最新版本的opencv ,上面语句安装的是 opencv 3.x.x版本,下面是是安装 4.X.X 版本。

conda install -c https://conda.anaconda.org/menpo opencv

或者查找你需要的版本,

conda search opencv -c conda-forge

或者通过一下方式查找 anaconda 官网中所有版本的 opencv 。

conda search -c https://conda.anaconda.org/menpo opencv*

很遗憾,虽然安装上了安装包 opencv ,能导入 cv2.ximgproc 模块, 但是还是没能跑同代码,是opencv 的版本不对。anaconda 官网的opencv 版本有限,我需要的是 opencv 4.X.X 的版本,我的 python 是 3.6 版本。可是 anaconda 官网的 opencv 4.X.X python 需要 大于或等于 3.7 。所以不管是用 conda install -c https://conda.anaconda.org/menpo opencv 还是 conda install -c https://conda.anaconda.org/menpo opencv3 ,anaconda 给我匹配的可以安装的最新版本的 opencv 版本是 3.4.2 。

希望我上面的调试过程,能帮你少走弯路。


更正:
1、上面提到的 cv2.ximgproc.guideFilter 不是一个模块 。
2、 conda 是安装 opencv3 ,不是安装 opencv-python 和 opencv-contrib-python 。


参考链接:
1
2
3
4
5
6
7
8
9

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/883272.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-14
下一篇2022-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存