You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV中如何将drawKeypoints绘制的圆圈改为实心圆?

如何将OpenCV Blob检测的空心圆圈改为实心圆

嘿,作为曾经也在Blob检测绘图上卡壳的OpenCV新手,我来给你支招!

其实drawKeypoints默认绘制的是空心的关键点标记,要改成实心圆的话,有两种简单的方法:

方法一:手动遍历关键点,用cv2.circle绘制实心圆

这种方法最直观,能让你完全控制每个圆的样式:

  1. 先获取Blob检测得到的keypoints列表
  2. 遍历每个关键点,调用cv2.circle,把最后一个参数thickness设为-1(这个参数设为负数就会自动填充成实心)

示例代码如下:

import cv2

# 假设你已经完成Blob检测,得到keypoints和原始图像img
for kp in keypoints:
    # 参数依次是:目标图像、圆心坐标、半径、颜色(红色)、厚度(-1表示实心)
    cv2.circle(img, (int(kp.pt[0]), int(kp.pt[1])), int(kp.size/2), (0, 0, 255), -1)

# 显示或保存处理后的图像
cv2.imshow("Solid Blobs", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

这里要注意kp.size是Blob的直径,所以半径要除以2,这样画出来的实心圆大小会和你之前用drawKeypoints生成的空心圆圈完全匹配。

方法二:修改drawKeypoints的标记样式(可选)

如果你还是想用drawKeypoints函数,也可以通过指定参数实现类似效果,但灵活性不如手动绘制:

cv2.drawKeypoints(img, keypoints, img, color=(0,0,255), flags=cv2.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS, markerType=cv2.MARKER_CIRCLE)

不过这个方法生成的实心点大小可能和你之前的圆圈有差异,所以更推荐第一种方法来精准控制效果。

希望这能帮到你,加油!

内容的提问来源于stack exchange,提问作者a_parida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:33:24