OpenCV-Python官方教程-24-SIFT算法

Harris角点检测等具有旋转不变特性,即使图片发生了旋转,我们也能找到同样的角点。很明显即使图像发生旋转之后角点还是角点。那如果我们对图像进行缩放呢?角点可能就不再是角点了。以下图为例,在一副小图中使用一个小的窗口可以检测到一个角点,但是如果图像被放大,再使用同样的窗口就检测不到角点了。

所以在 2004 年,D.Lowe 提出了一个新的算法:尺度不变特征变换(SIFT),这个算法可以帮助我们提取图像中的关键点并计算它们的描述符。

SIFT 算法主要由四步构成:
(1)空间尺度极值检测
(2)关键点定位
(3)为关键点指定方向参数
(4)关键点描述符

现在让我们来看看 OpenCV 中关于 SIFT 的函数。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('jiheti.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#创建sift检测器
sift =cv2.xfeatures2d.SIFT_create()
kp,res = sift.detectAndCompute(gray,None)

img = cv2.drawKeypoints(img,outImage=img,keypoints=kp, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

plt.imshow(img)
plt.show()

OpenCV-Python官方教程-24-SIFT算法_第1张图片

  • 注:以上代码适用于3.0及以上版本。
  • 要使用sift算法,要安装opencv-contrib-python库,opencv-contrib-python库是在原有opencv-python库中扩展了sift等算法的。不可以直接安装opencv-contrib-python,需要先删除原有的opencv-python后再安装,操作如下:(1)pip uninstall opencv-python (2)pip install opencv-contrib-python

你可能感兴趣的:(经典图像处理,Opencv,SIFT算法)