可视化OpenCV KeyPoints

jst*_*er7 5 opencv visualization keypoint

我正在学习OpenCV,目前我正在尝试理解存储在a中的基础数据,KeyPoint以便我可以更好地利用我正在处理的应用程序的数据.

到目前为止,我一直在浏览这两页:

http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html?highlight=featuredetector#FeatureDetector

http://docs.opencv.org/doc/tutorials/features2d/feature_detection/feature_detection.html

然而,当我按照教程使用时drawKeypoints(),这些点的大小和形状都相同,并且使用看似随意的颜色绘制.

我想我可以遍历每个关键点的属性:绘制一个圆圈,绘制一个箭头(为角度),根据响应给它一个颜色,等等.但我认为必须有一个更好的方法.

是否有内置方法或类似的其他方法drawKeypoints()将帮助我更有效地可视化KeyPoints图像?

and*_*riy 5

是的,有执行任务的方法.如文档中所述

对于每个关键点,将绘制具有关键点大小和方向的关键点周围的圆

如果您使用的是Java,则只需指定关键点的类型即可:

Features2d.drawKeypoints(image1, keypoints1, imageOut2,new Scalar(2,254,255),Features2d.DRAW_RICH_KEYPOINTS);
Run Code Online (Sandbox Code Playgroud)

在C++中:

drawKeypoints( img_1, keypoints_1, img_keypoints_1, Scalar::all(-1), DrawMatchesFlags::DRAW_RICH_KEYPOINTS );
Run Code Online (Sandbox Code Playgroud)

  • 虽然我最终还是自己写了,但你的答案正是我最初想要的。DRAW_RICH_KEYPOINTS 标志是我所缺少的,这可能对未来的访问者非常有帮助。谢谢! (2认同)

小智 5

我有一个类似的问题,想自定义绘制的点,决定分享我的解决方案,因为我想改变绘制的点的形状。

您可以根据需要更改 cv2.circle 的行。im 是要绘制点的输入图像,keyp 是要绘制的关键点,col 是线条颜色,th 是圆边缘的粗细。

import cv2
import numpy as np
import matplotlib.pyplot as plt

def drawKeyPts(im,keyp,col,th):
    for curKey in keyp:
        x=np.int(curKey.pt[0])
        y=np.int(curKey.pt[1])
        size = np.int(curKey.size)
        cv2.circle(im,(x,y),size, col,thickness=th, lineType=8, shift=0) 
    plt.imshow(im)    
    return im    

imWithCircles = drawKeyPts(origIm.copy(),keypoints,(0,255,0),5)
Run Code Online (Sandbox Code Playgroud)