# -*-coding:utf-8-*-
#author: lyp time: 2018/7/31
import cv2
import numpy as npimg = cv2.imread('SLAM DUNK.jpg')grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转换为灰度图像

sift = cv2.xfeatures2d.SIFT_create()  # 用SIFT类来创建一个SIFT对象
kp = sift.detect(grayImg, None)  # 检测关键点
_, des = sift.compute(grayImg, kp)  # 计算关键点描述

cv2.drawKeypoints(img, kp, img)  # 根据关键点和描述画出关键点
cv2.imshow('Key Points', img)cv2.waitKey()
cv2.destroyAllWindows()

0.前言

从OpenCV3 开始,SIFT之类的算法已经移除了release,转而放到了contrib的xfeatures里,所以在进行本章及其以后的编程时候,需要先卸载之前安装的Opencv-python版本(如果你是跟着我之前博客里面的话,就没必要卸载啦),然后运行pip install opencv-contrib-python==3.3.1.11。具体步骤可以参考https://www.cnblogs.com/gfgwxw/p/9309920.html

1. 程序详解

 a. 创建一个SIFT的对象

retval=cv2.xfeatures2d.SIFT_create([, nfeatures[, nOctaveLayers[, contrastThreshold[, edgeThreshold[, sigma]]]]])

b.检测关键点
keypoints=cv2.Feature2D.detect(image[, mask])image: 源图像mask:掩膜keypoints: 关键点向量

c.计算关键点的描述
keypoints, descriptors=cv2.Feature2D.compute(image, keypoints[, descriptors])keypoints: 已知的关键点向量descriptors:关键点描述向量

d.根据关键点和描述画出关键点
outImage=cv2.drawKeypoints(image, keypoints, outImage[, color[, flags]])outImage: 输出图像,画好的那种image: 源图像keypoints: 关键点向量color: 颜色flags: 各种属性值
cv2.DRAW_MATCHES_FLAGS_DEFAULT, 自动创建输出图像 关键点的尺寸和方向不会被画出
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS, 画出关键点、尺寸和方向
cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG, 手动创建输出图像
cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS 单一的关键点将不被画出
2.注意彩色图像转化为灰度图像  为了降低算法的复杂度,SIFT算法的第一步就是将传入的彩色图像转化为灰度图像

3.感谢https://zhuanlan.zhihu.com/c_154380889

转载于:https://www.cnblogs.com/gfgwxw/p/9399668.html

【CV学习4】OpenCV-Python: SIFT Demo one相关推荐

  1. pythonopencv读取图像属性_2、OpenCV Python 图像属性获取

    __author__ = "WSX" import cv2 as cv import numpy as np image = cv.imread("1.JPG" ...

  2. 深度学习之windows python faster rcnn 配置及demo运行

    写这篇文章主要是针对深度学习零基础的新手,因为我也是新手,在配置环境这一块花了我很大的心血,网上的资料很多都只是说配置,然后直接运行就完了,可是对于我这样的新手在配置的过程中会遇见各种各样的问题,所以 ...

  3. Python 基础知识学习笔记——OpenCV(1)

    Python 基础知识学习笔记--OpenCV(1) OpenCV是一个开源的跨平台计算机视觉和机器学习软件库,它轻量而且高效,被广泛的使用. 整理一下OpenCV学习笔记,以防忘记. 文章目录 Py ...

  4. 使用深度学习OpenCV python进行字符识别

    An eazy code from eazy ciphers 易密码的易密码 Hii!! welcome you all to our first medium story-. Well when I ...

  5. cv python 样例_【CV实战】OpenCV—Hello world代码示例

    简介OpenCV OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函数 ...

  6. 【学习OpenCV4】案例3:OpenCV Python语言开发环境搭建

    本书分享内容来自图书学习OpenCV 4:基于Python的算法实战>,该书刚刚上市,是国内第一本系统讲解OpenCV4各个模块的图书,配套案例深入浅出的讲解.第一章有在各个平台搭建环境的介绍, ...

  7. Opencv+Python学习记录9:掩膜(掩码)的使用(内附详细代码)

    一,基本概念 OpenCV中的很多函数都会指定一个掩模,也被称为掩码,例如: 计算结果=cv2.add(参数1,参数2,掩模) 当使用掩模参数时,操作只会在掩模值为非空的像素点上执行,并将其他像素点的 ...

  8. opencv python 高斯滤波_OpenCV 学习:8 高斯滤波GaussianBlur

    1 什么是高斯滤波? 高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程.[1]通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他 ...

  9. 学习Opencv+Python之银行卡卡号识别

    学习Opencv+Python之银行卡卡号识别 思路: 获取模板轮廓 获取模板中每个数字的轮廓 获取银行卡卡号轮廓 分别提取卡号中的每个数字的轮廓 对比识别 代码: # 导入工具包 from imut ...

最新文章

  1. 普华永道:2018 AI预测报告 将回答关于数据的重大问题
  2. php try 并回滚,ThinkPHP异常处理、事务处理(事务回滚)
  3. python输入语句-1、python基本的元素及输出语句
  4. go数组去除重复_让我们一起啃算法----删除排序链表中的重复元素
  5. Java中的锁[原理、锁优化、CAS、AQS]
  6. c语言数组宏定义标识符,C语言学习笔记--预编译/宏定义/数组/参数传递/函数指针...
  7. Google的自动驾驶汽车无事故成功完成30万英里的驾驶路程
  8. ubuntu支持中文设置
  9. [PyTorch] 拼接多个tensor:torch.cat((A,B),axis)
  10. Atitit.分区对索引的影响 分区索引和全局索引 attilax总结
  11. GridView跨页面多选
  12. (1)数据结构-绪论
  13. 计算机常用的汉字机内码有哪几种,常用的汉字机内码有几种?
  14. Fiddler抓包https配置
  15. MS08067利用方法
  16. 转载GIT 学习--活灵活现用Git(二)
  17. 常见英文咒语与低俗词汇一览表(应避免使用)
  18. 知识付费资源变现小程序源码+可开流量主/带教程
  19. ctr 平滑_根据样本数进行点击率CTR的修正 - Wilson CTR
  20. 【BUG解决】 RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor)

热门文章

  1. 高新园区到大连计算机学校,教育局 | 高新园区2018指标分配表及大连各区指标到校表(附:现行大连指标名额分配方案)...
  2. C++中new和malloc
  3. flex布局问题整理
  4. python调用jenkinsAPI构建jenkins,并传递参数
  5. /*携程面试*/四个数组,都已经排好序,找出四个数组的交集
  6. Bootstrap页面布局17 - BS选项卡
  7. 管理数据通用权限系统快速开发框架设计
  8. 这段js代码得拯救你多少时间
  9. 关于sizeof的一些东西
  10. 调整idea中控制台及右侧提示框字体大小