cv2.drawKeypoints函数(opencv学习)

函数表示:

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和方向,是最能显示特征的一种绘制方式。

示例代码:

import cv2
import numpy as np


def SIFT(img):
    I = cv2.imread(img)
    descriptor = cv2.xfeatures2d.SIFT_create()  # 在2004年,不列颠哥伦比亚大学的D.Lowe在他的论文中提出了一种新的算法,即尺度不变特征变换(SIFT)
    (kps, features) = descriptor.detectAndCompute(I, None)
    cv2.drawKeypoints(I, kps, I, (0, 255, 255), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
    cv2.imshow('img', I)
    cv2.waitKey(0)
    cv2.imwrite('sift_keypoints.jpg', I)
    cv2.destroyAllWindows()


if __name__ == '__main__':
    SIFT('left.png')

运行结果:

cv2.drawKeypoints函数(opencv学习)_第1张图片

 

你可能感兴趣的:(opencv函数学习)