Python-OpenCV官方教程SIFT算法
程序员文章站
2022-03-11 21:12:23
Harris角点检测等具有旋转不变特性,即使图片发生了旋转,我们也能找到同样的角点。很明显即使图像发生旋转之后角点还是角点。那如果我们对图像进行缩放呢?角点可能就不再是角点了。以下图为例,在一副小图中使用一个小的窗口可以检测到一个角点,但是如果图像被放大,再使用同样的窗口就检测不到角点了。所以在 2004 年,D.Lowe 提出了一个新的算法:尺度不变特征变换(SIFT),这个算法可以帮助我们提取图像中的关键点并计算它们的描述符。SIFT 算法主要由四步构成:(1)空间尺度极值检测(2)关键点定位...
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()
- 注:以上代码适用于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
本文地址:https://blog.csdn.net/Galen_xia/article/details/109025944