SIFT特征提取和匹配

import cv2
def sift_kp(image):
    gray_image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    sift = cv2.SIFT.create()
    kp,des = sift.detectAndCompute(image, None)
    #kp_image = cv2.drawKeypoints(image, kp, None)
    kp_image = cv2.drawKeypoints(image, kp, image, (122, 255, 122), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
    return kp_image,kp,des
#image = cv2.imread('E:\pythonProject\\N2.jpg')
#image = cv2.imread('E:\pythonProject\image1.jpg')
image = cv2.imread('E:\pythonProject\ldh1.jpg')
kp_image, _, des = sift_kp(image)
print(image.shape, des.shape)
cv2.namedWindow('sift features',cv2.WINDOW_NORMAL)
cv2.imshow('sift features', kp_image)
if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()

老版本的OpenCV,则第四行用

sift = cv2.xfeatures2d_SIFT.create()

cv2.drawKeypoints(image, keypoints, outImage, color=None, flags=None)
image 原始图像,可以使三通道或单通道图像;

keypoints 特征点向量,向量内每一个元素是一个KeyPoint对象,包含了特征点的各种属性信息;
outImage 特征点绘制的画布图像,可以是原图像;
color 绘制的特征点的颜色信息,默认绘制的是随机彩色;
flags 特征点的绘制模式,其实就是设置特征点的那些信息需要绘制,那些不需要绘制,有以下几种模式可选:

DRAW_MATCHES_FLAGS_DEFAULT:只绘制特征点的坐标点,显示在图像上就是一个个小圆点,每个小圆点的圆心坐标都是特征点的坐标。
DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG:函数不创建输出的图像,而是直接在输出图像变量空间绘制,要求本身输出图像变量就是一个初始化好了的,size与type都是已经初始化好的变量。
DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS :单点的特征点不被绘制。
DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:绘制特征点的时候绘制的是一个个带有方向的圆,这种方法同时显示图像的坐标,size和方向,是最能显示特征的一种绘制方式

Original: https://blog.csdn.net/GGY1102/article/details/128430788
Author: Robot-G
Title: SIFT特征提取和匹配

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/793229/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球