OpenCV Python - 特征检测
在图像处理的上下文中,特征是图像中关键区域的数学表示。 它们是图像中视觉内容的矢量表示。
特征使得对它们执行数学运算成为可能。 各种计算机视觉应用包括对象检测、运动估计、分割、图像对齐等。
任何图像中的突出特征包括图像的边缘、角或部分。 OpenCV 支持Haris 角点检测 和Shi-Tomasi 角点检测 算法。OpenCV 库还提供了实现SIFT(尺度不变特征变换)、SURF(加速稳健特征)和 FAST 角点检测算法的功能。
Harris 和 Shi-Tomasi 算法是旋转不变的。 即使图像旋转了,我们也可以找到相同的角点。 但是当图像被放大时,一个角可能不是图像的角。 下面给出的图描绘了相同的情况。
D.Lowe 的新算法 Scale Invariant Feature Transform (SIFT) 提取关键点并计算其描述符。
这是通过以下步骤实现的 −
- 比例空间极值检测。
- 关键点定位。
- 定位任务。
- 关键点描述符。
- 关键点匹配。
就 OpenCV 中 SIFT 的实现而言,它从加载图像并将其转换为灰度开始。 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)
输出
原图和画了关键点的图如下 −
这是一张原始图片。
下面给出的图像是有关键点的图像 −