当我想要在python上测试FeatureDetector并使用OpenCV的SIFT时,由于我在pycharm上仅仅安装了opencv-python,所以会出现报错(忘记截图了,好像是:'module' object has no attribute 'xfeatures2d'。大致意思是说找不到 xfeatures2d 的库)。
2018.9.30更新:
Windows环境下把opencv中python的py文件复制到python安装位置的package 里。
linux下载opencv-python!
——来源:python opencv 怎么安装xfeature2d.extra 2d features framework_百度知道
https://zhidao.baidu.com/question/2079216204608995428.html
——在OpenCV3.1.0中使用SIFT,SURF算法-布布扣-bubuko.com
http://www.bubuko.com/infodetail-1285356.html
别人出现的相同报错:
cv2.error: OpenCV(3.4.3) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cpp:1207: error: (-213:The function/feature is not implemented) This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'cv::xfeatures2d::SIFT::create'
于是想要在pycharm上安装 opencv-contrib-python。但是在这个过程中出现了了另一个问题:老是安装不上opencv-contrib-python,总是会出现以下的错误:
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
在cmd里运行pip install opencv-contrib-python也会出现以下提示:
C:\Users\Administrator>pip install opencv-contrib-python
Requirement already satisfied: opencv-contrib-python in c:\users\administrator\a
ppdata\roaming\python\python36\site-packages (3.4.3.18)
Requirement already satisfied: numpy>=1.11.3 in e:\anaconda3\lib\site-packages (
from opencv-contrib-python) (1.14.3)
然后网上的相关资料建议我先把opencv-python给卸载(uninstall,点击pycharm中file菜单栏的setting后的减号“—”),我照做了,但是试了很多次,发现后面安装不回来......
接着我按照图三opencv-contrib-python右边的链接(https://github.com/skvark/opencv-python)下载了它提供的github文件(opencv-contrib-python在它给的GitHub里,出现的文件名就是opencv-python),
不过好像并没有什么用,好像还是安装不了,出现报错:pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
然后我到Python Extension Packages for Windows - Christoph Gohlke(https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv)里下载了opencv_python‑3.4.3‑cp36‑cp36m‑win_amd64.whl想要重新安装opencv_python‑3.4.3。不过按照教程用pip install opencv-python,返回的依旧是:
C:\Users\Administrator>pip install opencv-python
Requirement already satisfied: opencv-python in e:\anaconda3\lib\site-packages (
3.4.3)
然后我想,既然在e:\anaconda3\lib\site-packages里面已经存在了相关的package:opencv_contrib_python-3.4.3.18.dist-info和opencv_python-3.4.3.dist-info,那python安装位置的E:\Python\Lib\site-packages有没有opencv_contrib_python-3.4.3.18.dist-info和opencv_python-3.4.3.dist-info呢?
一看,还真没有。于是我突发奇想,把e:\anaconda3\lib\site-packages里的这两个库复制粘贴到了E:\Python\Lib\site-packages里面,接着再去尝试在pycharm里面install安装opencv-python和opencv-contrib-python。不过第一次试还不行,依旧报错说install unsuccessful。不过没关系,我再去试第二次(第二次什么都没有去改),然后终于安装成功了!
去试了试网上给的xfeatures2d测试代码和图片:
import cv2
import numpy as np
img1 = cv2.imread("the_book_thief.jpg", cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread("me_holding_book.jpg", cv2.IMREAD_GRAYSCALE)
# ORB Detector
orb = cv2.ORB_create()
kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(img2, None)
# Brute Force Matching
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)
matches = sorted(matches, key = lambda x:x.distance)
matching_result = cv2.drawMatches(img1, kp1, img2, kp2, matches[:50], None, flags=2)
cv2.imshow("Img1", img1)
cv2.imshow("Img2", img2)
cv2.imshow("Matching result", matching_result)
cv2.waitKey(0)
cv2.destroyAllWindows()
得到了以下结果:
特征匹配成功!
还有一种问题是刚开始下载pycharm时没法导入opencv,可以参考这一篇博客介绍的方法:
win10 +python3.6环境下安装opencv以及pycharm导入cv2有问题的解决办法 - 蛋片鸡 - 博客园
https://www.cnblogs.com/FHC1994/p/8990307.html
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
win10 +python3.6环境下安装opencv以及pycharm导入cv2有问题的解决办法
一、安装opencv
借鉴的这篇博客已经写得很清楚了--------https://blog.csdn.net/u011321546/article/details/79499598 ,这里我只是记录一下自己的安装过程
按理说这里安装opencv应该有两种办法,一种方法是python的pip安装,另外一种方法是直接在Pycharm里安装,但是尝试后发现第二种方法发现有错,如下图。
出错原因是“试着从系统终端运行这个命令”,所以我们只能用第一种方法pip安装。
在安装opencv之前要先安装pip,安装pip方法如下:
进入Python安装目录下的Scripts路径,执行 easy_install-3.6.exe pip (因为我的python版本是3.6的),执行了这条命令后,pip就安装成功了,pip的功能如下:
安装完pip后,接着安装opencv(其他模块安装也类似如下这种方法):
进入Python安装目录下的Scripts路径,执行 pip install opencv-python
这里要查看安装的opencv的版本话需要在,需要在命令行终端(或python自带的IDLE中)运行如下代码即可查看:
import cv2
cv2.__version__
效果如下,可以知道我的opencv版本为3.4.0
二、pycharm导入cv2有问题的解决办法
pip安装好opencv后,可是在pycharm里导入cv2还是会报错,这是为什么呢?我也百度了好一会儿才找到解决方法,这里参考博客:https://blog.csdn.net/Eclipsesy/article/details/77686807 这篇博客很好解决了我的问题,但是博客里的方法最后一处感觉有点多余,只需要第一步即可解决问题。
解决办法:
要确定pycharm里的环境变量是否包含python的环境lib,查看方法如下图所示:
点击Show All,在点击红色圈查看pycahrm的查找路径,最后看黄色圈的路径是否加进去。注意:只有黄色圈部分路径加进去了(site-packages这个文件夹必须包含进去),Pycahrm才能正确导入cv2。