文章目录
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 。

在翻阅别人的博客,大概都是认为问题出在了 安装了多个版本的 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 用于导向滤波。
有博客认为: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 。
很遗憾,这种方法依旧还是未能成功导入模块 cv2.ximgproc 。在我创建的 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 语句安装依赖包时,版本发生了冲突,尽管离线方式安装也没成功。
本文所用 conda 版本是 4.5.11
conda --version
看到有别的博客是通过直接在 opencv 的 Github 上面源码安装,我这里没试,感觉很麻烦,大家可以试试能不能行。
另外,重新创建了一个虚拟环境,python 版本是 3.6 ,只安装 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 不是一个模块 。 cv2.ximgproc 是一个模块,guideFilter 是该模块的一个函数。
2、 conda 是安装 opencv3 或者 opencv ,不是安装 opencv-python 和 opencv-contrib-python 。
最后总算是实现了一键安装 opencv ,
pip install opencv-python
或者
conda install opencv
一般,上述语句安装,都是安装的匹配你 python 版本的 opencv 最新版本。
上述问题主要在于:conda 创建的虚拟环境中 python 版本;你所需的 opencv 版本;还有 conda 和 pip 安装匹配的问题。
首先,我们使用 conda 创建虚拟环境,是希望通过 anaconda 来统一管理各个依赖包,包括不同依赖包之间的版本匹配。
然后,存在一个问题就是,conda 中可以下载到的依赖包可能有限,比如 pip 可以下到几乎所有的 python 依赖包,但是 conda 中并没有那么多的依赖包(当然也是很多的,只有个别的包 pip 有,但是 conda 没有),所以 你在 conda 创建的虚拟环境中 使用 pip install xxx 时需要特别注意这一点,即使你 pip install opencv-python == 4.1.0.25 ,但是 conda 里面并没有这个版本,所以导致 你使用 pip install opencv-python ==4.1.0.25 安装时,相关安装文件夹下是空的,但是你使用 conda list 显示安装了 opencv-python,其实并没有安装成功。
还有就是,在你使用 conda install opencv 安装时,比如 你 创建 的虚拟环境 的 python 版本为 3.6 ,那么 就不允许你下载 4.1.0.25 版本的 opencv ,python 版本为 3.6 ,那么你能在 conda 中下载到的 最新的 opencv 版本是 3.4.2 。你如果要下载 4.1.0.25 版本的 opencv , 那么 你创建虚拟环境时应该 将 python 版本设置为大于 3.7。
最后,还有一点需要注意的是,使用 pip install opencv-python==指定版本 时要慎重,首先你要确定 anaconda 确实有你指定的版本存在,你可以通过 conda search -c https://conda.anaconda.org/menpo opencv* 来查询,如果你创建的虚拟环境中的 python 版本 和 你指定的 opencv-python 版本不匹配则会出现 安装的是空文件的情况,并不会报错(很难让人发现问题所在),虽然 conda list 还会显示 你安装了 你指定的 opencv-python 版本,实际是你安装过,但并没有成功。
如果 你是使用 conda install opencv-python==指定版本,那么要是 conda 中没有你指定的版本,则会直接报错,如果有指定版本,则会安装 和你的 python 版本匹配的最新的 opencv 版本。这个时候你还要考虑 这个最新版本 的 opencv 是否是所需的,比如 给你安装的是 最新版本的 opencv 4.5.5 ,但是 你实际需要的是 3.4.2 版本,你在使用 opencv 时,可能会由于版本功能差异导致报错,其实并不是代码的问题,只是 opencv 版本不匹配导致。
希望能解决你在安装 opencv 时遇到的问题。
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下