win10安装可以使用sift和surf的opencv-python

最近发现安装的opencv-python里面没有sift,自己安装的就是contrib版的,为什么没有sift呢?网上一顿搜索,应该版本的问题,所以只能把电脑上的最新版本的4.0.1版本的卸载,重新安装3.4.2.16版本的opencv,所以记录一下。

卸载原始的opencv-python包

首先将电脑中的opencv-python版本卸载,我使用的anaconda管理的python,所以打开anaconda prompt,执行

conda list

发现自己的opencv-python版本是 4.0.0.21
在这里插入图片描述
然后运行如下代码将其卸载。

pip uninstall opencv-contrib-python

等待包卸载完成。
在这里插入图片描述

安装3.4.2.16版本的opencv-python包

然后去网站上下载需要的3.4.2.16版本的python-opencv安装包(链接地址)。
网站打开如下图所示,因为我的是python3.6 所以直接下载对应的版本即可
在这里插入图片描述
下载后将安装包放到(你的安装盘:)\Anaconda3\Lib\site-packages中(我安装anaconda的地址是“D:\Anaconda3”,以我的地址为例),然后打开anaconda prompt,执行以下语句安装刚才下载的opencv-python包:
进入d盘:

d:

cd到安装包的目录下:

cd D:\Anaconda3\Lib\site-packages

安装刚才下载的安装包:

pip install opencv_contrib_python-3.4.2.16-cp36-cp36m-win_amd64.whl

最后等待完成即可:
在这里插入图片描述

测试安装结果

运行以下代码

import cv2
img1_path = r''
img2_path =r''
img1 = cv2.imread(img1_path)
img2 = cv2.imread(img2_path)
# 定义surf特征点检测器
surf = cv2.xfeatures2d.SURF_create(400)
# 检测两张图中的特征点
kp1,des1 = surf.detectAndCompute(img1,None)
kp2, des2 = surf.detectAndCompute(img2,None)
# 使用knn对两张图中的特征点分别计算最相近的两个点
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1, des2, k=2)
# 最相近的两个点的比值大于阈值才认为是匹配的
good = []
for m, n in matches:
    if m.distance < 0.75 * n.distance:
        good.append([m])
# 将匹配的特征点画在图中
img_out = cv2.drawMatchesKnn(img1, kp1, img2, kp2, good[:15], None, flags=2)
cv2.imshow('image', img_out)  # 展示图片
cv2.waitKey(0)  
cv2.destroyAllWindows() 

得到最终的结果
win10安装可以使用sift和surf的opencv-python_第1张图片

如果你安装了3.4.2.16版本的还是出错,可以试试其他版本的。

你可能感兴趣的:(技术类)