OpenCV Python - 特征检测



在图像处理的背景下,特征是图像中关键区域的数学表示。它们是图像视觉内容的向量表示。

特征使得对它们进行数学运算成为可能。各种计算机视觉应用包括目标检测、运动估计、分割、图像对齐等。

任何图像中的突出特征包括边缘、角点或图像的一部分。OpenCV 支持**Harris 角点检测**和**Shi-Tomasi 角点检测**算法。OpenCV 库还提供了实现**SIFT**(尺度不变特征变换)、**SURF**(加速鲁棒特征)和 FAST 算法进行角点检测的功能。

Harris 和 Shi-Tomasi 算法是旋转不变的。即使图像旋转,我们也可以找到相同的角点。但是,当图像放大时,如果图像,角点可能不再是角点。下图描述了这一点。

Shi Tomasi

D.Lowe 的新算法,**尺度不变特征变换**(SIFT)提取关键点并计算其描述符。

这是通过以下步骤实现的:

  • 尺度空间极值检测。
  • 关键点定位。
  • 方向分配。
  • 关键点描述符。
  • 关键点匹配。

就 OpenCV 中 SIFT 的实现而言,它从加载图像并将其转换为灰度图像开始。**cv.xfeatures2d.SIFT_create()** 函数创建一个 SIFT 对象。

示例

调用其**detectAndCompute()** 方法获取关键点,这些关键点绘制在原始图像的顶部。以下代码实现了此过程

import numpy as np
import cv2 as cv
img = cv.imread('home.jpg')
gray= cv.cvtColor(img,cv.COLOR_BGR2GRAY)
sift = cv.SIFT_create()
kp = sift.detect(gray,None)
img=cv.drawKeypoints(gray,kp,img)
cv.imwrite('keypoints.jpg',img)

输出

原始图像和绘制了关键点的图像如下所示:

这是一张**原始图像**。

Scale Space

下图是**带有关键点的图像**:

SIFT
广告