OpenCV Python 如何使用SIFT算法检测和绘制图像中的关键点
SIFT(尺度不变特征变换) 是一种尺度不变的特征描述方法。它可以检测图像中的关键点并计算其描述符。首先我们要用 cv2.SIFT_create() 创建一个 SIFT 对象,然后使用 sift.detect() 来检测关键点,其中 sift 是创建的SIFT对象。要绘制关键点,我们使用 cv2.drawKeypoints() 方法。
步骤
要使用SIFT算法检测和绘制输入图像中的关键点,可以按照以下步骤进行:
- 导入所需的库 OpenCV 和 NumPy 。确保您已经安装了它们。
-
使用 cv2.imread() 方法读取输入图像。指定图像的完整路径。使用 cv2.cvtColor() 方法将输入图像转换为灰度图像。
-
使用 sift=cv2.SIFT_create() 初始化SIFT对象的默认值。
-
检测灰度图像中的关键点。使用 sift.detect() 方法。它返回关键点 kp 。
-
在图像上绘制检测到的关键点 kp ,使用 cv2.drawKeypoints() 函数。要绘制丰富的关键点,可以传递参数 flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS 。
-
显示带有绘制的关键点的图像
让我们看一下使用SIFT算法检测和绘制输入图像中的关键点的示例。
输入图像
我们将使用下面的图像作为示例中的输入文件。
示例
在这个程序中,我们使用SIFT算法检测和绘制输入图像中的关键点。
# import required libraries
import cv2
# read input image
img = cv2.imread('architecture2.jpg')
# convert the image to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Initiate SIFT object with default values
sift = cv2.SIFT_create()
# find the keypoints on image (grayscale)
kp = sift.detect(gray,None)
# draw keypoints in image
img2 = cv2.drawKeypoints(gray, kp, None, flags=0)
# display the image with keypoints drawn on it
cv2.imshow("Keypoints", img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
执行上述代码后,将打开以下输出窗口,显示绘制有关键点的图像。
请注意,关键点以不同的颜色绘制。你可以将颜色(例如,红色为(0,0,255))作为参数传递给 drawKeypoints() 函数,以绘制单色关键点。
示例
在此示例中,我们将看到如何使用SIFT算法在输入图像中检测和绘制关键点。 我们将参数 flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS 传递给 cv2.drawKeypoints() 函数。
# import required libraries
import cv2
# read input image
img = cv2.imread('architecture2.jpg')
# convert the image to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Initiate SIFT object with default values
sift = cv2.SIFT_create()
# find the keypoints on image (grayscale)
kp = sift.detect(gray,None)
# draw keypoints in image
img2=cv2.drawKeypoints(gray,kp,None,flags=cv2.DRAW_MATCHES_FLAG
S_DRAW_RICH_KEYPOINTS)
# display the image with keypoints drawn on it
cv2.imshow("Keypoints", img2)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
在执行上述代码时,它会打开如下 输出 窗口,显示带有绘制关键点的图像。
注意,关键点以不同的大小和方向绘制。