【CV学习4】OpenCV-Python: SIFT Demo one

# -*-coding:utf-8-*-
#author: lyp time: 2018/7/31
import cv2
import numpy as np

img = 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

posted @ 2018-08-01 10:38  苟富贵  阅读(560)  评论(0编辑  收藏  举报