OpenCV Python 特征检测
在图像处理的上下文中,特征是图像中关键区域的数学表示。它们是图像中视觉内容的向量表示。
特征使得能够对它们进行数学运算。各种计算机视觉应用包括物体检测,运动估计,分割,图像对齐等。
任何图像中的显著特征包括边缘,角点或图像的某些部分。OpenCV支持 哈里斯角点检测 和 Shi-Tomasi角点检测 算法。OpenCV库还提供实现 SIFT(尺度不变特征变换) 、 SURF(加速稳健特征) 和 FAST角点检测算法。
哈里斯和Shi-Tomasi算法是旋转不变的。即使图像旋转,我们也可以找到相同的角点。但当图像被放大时,如果图像中的一个角点不是角点。下面的图形描述了相同的情况。
D.Lowe(David G. Lowe)的新算法, 尺度不变特征转换(Scale Invariant Feature Transform) (SIFT)提取关键点并计算其描述符。
这通过以下步骤实现:
- 尺度空间极值检测。
- 关键点定位。
- 方向分配。
- 关键点描述符。
- 关键点匹配。
就SIFT在OpenCV中的实现而言,它从加载图像并将其转换为灰度开始。使用 cv.SHIFT_create() 函数创建一个SIFT对象。
示例
调用其 detect() 方法可以获取在原始图像上绘制的关键点。以下代码实现了此过程。
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)
输出
原始图像和绘制了关键点的图像如下所示 –
这是一张 原始图像 。
下面给出了一张图片,该图片具有关键点。