文章目录

  • 一、安装额外的opencv-contrib-python库,并保持版本一致
  • 二、两个库同时回退版本到3.4.2.16的版本
  • 三、测试SIFT算子匹配点的一个案例

sift = cv2.xfeatures2d.SIFT_create()即使安装了contrib也无法正常工作的解决办法

一、安装额外的opencv-contrib-python库,并保持版本一致

首先安装contrib,并检查和opencv-python版本是否一致

pip install opencv-contrib-python
pip list

但是依然报错

sift = cv2.xfeatures2d.SIFT_create()
# 报错信息
AttributeError: module 'cv2.cv2' has no attribute 'xfeatures2d'

二、两个库同时回退版本到3.4.2.16的版本

首先卸载当前版本

 pip uninstall opencv-pythonpip uninstall opencv-contrib-python

然后重新安装

pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16

如果还是不行,重启一下anaconda,问题解决。

三、测试SIFT算子匹配点的一个案例

核心公式

# 新建一个sift算子
sift = cv2.xfeatures2d.SIFT_create()
# 计算特征点和特征点周围的特征向量
kp1, des1 = sift.detectAndCompute(img1,None)
# 进行KNN特征匹配,k设置为2
matches = cv2.BFMatcher().knnMatch(des1,des2, k=2)
# 进行匹配点筛选,这个地方一直没看懂
for m,n in matches:if m.distance < 0.75*n.distance:good.append([m])
# 在匹配的点之间进行连线
imgNew = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)

完整代码

import numpy as np
import cv2
import matplotlib.pyplot as pltprint("debug")
# 加载图片
img1 = cv2.imread('images/1.jpg',0)          # queryImage
# img3是和img1一样的照片
img3 = cv2.imread('images/3.jpg',0)
# 对这张照片进行高斯模糊
blurred = cv2.GaussianBlur(img3, (9, 9), 0)
# 再旋转
(height, width) = blurred.shape[:2]
center = (width//2, height//2)
# 定义旋转矩阵,3个参数分别为:旋转中心,旋转角度,缩放比率
M = cv2.getRotationMatrix2D(center, 45, 1.0)
# 正式旋转,这样就得到了和原始图片img1不太一样的照片
rotated = cv2.warpAffine(blurred, M, (width,height))
img2 = rotatedcv2.imshow("original image",img1)
cv2.waitKey(0)
cv2.imshow("after blurred and rotated",img2)
cv2.waitKey(0)# 初始化SIFT算子,如果不能用,使用pip安装如下版本的库并重启conda
# pip install opencv-python == 3.4.2.16
# pip install opencv-contrib-python == 3.4.2.16
sift = cv2.xfeatures2d.SIFT_create()# 使用SIFT算子计算特征点和特征点周围的特征向量
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)# BFMatcher中设置knn的k值
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2, k=2)# Apply ratio test
good = []
for m,n in matches:if m.distance < 0.75*n.distance:good.append([m])# cv.drawMatchesKnn expects list of lists as matches.
imgNew = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)
# 保存图片
cv2.imwrite("imgNew.jpg",imgNew)
# 使用plt绘制
plt.imshow(imgNew),plt.show()cv2.destroyAllWindows()

运行结果

原图:


模糊和旋转之后

进行特征点匹配

SIFT特征检测算子和sift = cv2.xfeatures2d.SIFT_create出错的解决办法相关推荐

  1. cv2.xfeatures2d.SIFT_create()时报错The function/feature is not implemented

    cv2.xfeatures2d.SIFT_create()时报错The function/feature is not implemented 应该是新版本api改了, 解决方法1: 查找新版本api ...

  2. opencv4.10不能使用sift = cv2.xfeatures2d.SIFT_create()

    python3.6 报错: error: (-213:The function/feature is not implemented) This algorithm is patented and i ...

  3. 运行cv2.xfeatures2d.SIFT_create()时报错The function/feature is not implemented的解决方法,亲测可用

    opencv-contrib-Python编译出现错误: sift = cv.xfeatures2d.SIFT_create() cv2.error: OpenCV(3.4.3) C:\project ...

  4. 树莓派安装opencv报错“opencv2/xfeatures2d/cuda.hpp”,解决办法

    找不到"opencv2/xfeatures2d/cuda.hpp"文件或位置, 1.打开报错的文件 2.通过winscp找到cuda.hpp文件的路径 3.替换报错路径 其他的报错 ...

  5. 【图像处理】——特征匹配(SIFT特征检测器+FLANN特征匹配方法+KNN近邻最优匹配筛选)——cv.xfeatures2d.SIFT_create()sift.detectAndCompute

    转载请注明地址 目录 1.特征检测和特征匹配方法 (1)特征检测算法 (2)特征匹配算法 (3)各种特征检测算法的比较 2.特征匹配的基本步骤(附带主要的函数) (1)图像预处理--灰度化(模板--查 ...

  6. sift特征检测与匹配

    文章目录 一 实验背景 1.sift算法介绍 1.1sift算法特点 1.2sift算法可以解决的问题 1.3 sift算法实现具体步骤 2.关键点相关概念 2.1关键点(特征点) 2.2尺度空间 3 ...

  7. 【OpenCV】2020年关于SIFT算法专利版权问题的解决办法

    前言 OpenCV 3.4之后因专利版权问题移除了SIFT/SURF的相关库,因此在使用较新版本的cv库时会报错 error: (-213:The function/feature is not im ...

  8. OpenCV图像特征提取学习四,SIFT特征检测算法

    一.SIFT特征检测概述 SIFT的全称是Scale Invariant Feature Transform,尺度不变特征变换,由加拿大教授David G.Lowe提出的.SIFT特征具有对旋转.尺度 ...

  9. OpenCV + CPP 系列(卅五)图像特征提取(SURF特征检测、SIFT特征检测)

    文章目录 一.SIFT特征检测 二.SURF特征检测 演示SURF.SIFT特征检测 OpenCV-python 角点特征检测之二(SIFT.SURF.ORB) 一.SIFT特征检测 SIFT(Sca ...

最新文章

  1. 从今天开始收集一些经典的算法。
  2. 我的Pandas学习经历及动手实践
  3. 基于关联规则(Variational Autoencoders)疾病预测系统实战:(pyspark FPGrowth实现频繁项集挖掘、最后给出预测模型topK准确率和召回率)
  4. 6.10 docker (二) 守护态运行
  5. 由于授权协议中的一个错误,远程计算机中断了会话
  6. 队列链式结构C/C++实现(数据结构严蔚敏版)
  7. JZOJ 1251. 收费站
  8. Oracle Stream配置详细步骤
  9. 数据可视化--pyecharts绘图
  10. java基础-关键字-native
  11. 基于JAVA+SpringBoot+Mybatis+MYSQL的销售团队管理系统
  12. [Linux日记]解决Ubuntu升级出现/boot空间不足问题
  13. 【红顶商人胡雪岩】-- 读完一点小感
  14. Python实现双色球随机选号
  15. 数据:FIT2CLOUD飞致云连续进入云管理软件市场权威研究报告
  16. 【操作系统】-- 进程同步、信号量机制(整型信号量、记录型信号量、PV操作)
  17. 赏析角度有哪些_从哪些角度赏析句子
  18. SAP-MM 常见移动类型
  19. golang 生成二维码名片 海报
  20. 实验室服务器系统崩溃,选课系统崩溃解救报告

热门文章

  1. MyCat分布式数据库集群架构工作笔记0008---Mycat主--从复制原理
  2. 正则表达式学习笔记011--贪婪和懒惰的匹配
  3. ASP.Net学习笔记007--ASP.Net Input版自增
  4. storm集群部署和配置过程详解
  5. python编程(multiprocessing库)
  6. mfc大观之五、六(消息机制和消息运行)
  7. python获取gps数据_python获取android设备的GPS信息脚本分享
  8. .ssh文件夹在哪里_【TOOLS】本地利用ssh远程连接服务器并启用远程服务器的jupyter lab并配置好anaconda的环境...
  9. burp proxy 过滤_burpsuite只拦截特定网站数据包教程
  10. c语言 动态链表,C语言的链表(篇章之二:动态链表)