python opencv的cv2.drawKeypoints()函数详解

我用的python3.x,opencv3.x.官方文档里介绍cv2.drawKeypoints()函数主要包含五个参数:

  • image:也就是原始图片
  • keypoints:从原图中获得的关键点,这也是画图时所用到的数据
  • outputimage:输出
  • color:颜色设置,通过修改(b,g,r)的值,更改画笔的颜色,b=蓝色,g=绿色,r=红色。

  • flags:绘图功能的标识设置,(可能标识的值由DrawMatchesFlags定义,具体的要看DrawMatchesFlags这个函数,c++里是这样)。在Python里面标识由cv2.DRAW_MATCHES_FLAGS_DEFAULT, cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS,cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG, cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS修改
im_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]), (255,0,0), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

例子如上,这是我写的另一篇blob分析的一句,具体请看那篇博客。在这句程序里im是原图,关键点keypoints,输出放在了一个新建数组里,这里用的蓝色标定,具体按个人爱好。flags挺有意思,这是标识方式的一种设置,按字面意思,比如说用cv2.DRAW_MATCHES_FLAGS_DEFAULT参数,表示用默认参数,这种方式比较简单,在我用blob画图的那篇程序中,仅仅画出了圆的中心点。但是如果用cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS,他会以一种丰富的方式画出来,效果会好点。

### cv2.AKAZE 成员函数详解 cv2.AKAZE 是 OpenCV 中用于特征检测和描述的一种算法。AKAZE 特征检测器能够提取图像中的关键点并计算其描述符,这些描述符可以用来匹配不同视角下的同一物体或场景。 #### 函数原型 ```cpp class AKAZE : public Feature2D { public: static Ptr<AKAZE> create(int descriptor_type=DESCRIPTOR_KAZED, int descriptor_size=0, int descriptor_channels=3, float threshold=0.001f, int nOctaves=4, int nOctaveLayers=4, int diffusivity=DIFF_PM_G2); } ``` 此构造方法允许设置多个参数来控制 AKAZE 的行为[^1]。 #### 参数说明 - `descriptor_type`:指定要使用的描述子类型,默认为 DESRIPTOR_KAZED。 - `descriptor_size`:设定描述子大小;如果设为 0,则会自动选择默认尺寸。 - `descriptor_channels`:定义描述子通道数,默认值为 3。 - `threshold`:阈值参数,影响关键点的选择标准。 - `nOctaves` 和 `nOctaveLayers`:分别表示金字塔层数及其每层迭代次数。 - `diffusivity`:扩散系数选项,决定了如何处理梯度信息。 #### 使用实例 下面是一个简单的 Python 实现例子: ```python import numpy as np import cv2 # 初始化 AKAZE 检测器 akaze = cv2.AKAZE_create() # 加载图片 img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE) # 执行检测操作 keypoints, descriptors = akaze.detectAndCompute(img, None) # 绘制结果 out_img = cv2.drawKeypoints(img, keypoints, outImage=np.array([]), color=(0,255,0)) # 显示带有标记的关键点图 cv2.imshow("AKAZE Keypoints", out_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这段代码展示了如何创建一个 AKAZE 对象,并利用它找到输入灰度图像中的关键点以及对应的描述向量。最后通过绘制功能可视化所得到的结果[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值