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。
在图像 cv2.drawKeypoints() 函数上绘制检测到的关键点 kp。要绘制丰富的关键点,您可以将 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()
输出
执行上述代码后,将打开以下输出窗口,显示绘制了关键点的图像。
请注意,绘制的关键点大小不同,甚至方向也不同。