OpenCV中如何将drawKeypoints绘制的圆圈改为实心圆?
如何将OpenCV Blob检测的空心圆圈改为实心圆
嘿,作为曾经也在Blob检测绘图上卡壳的OpenCV新手,我来给你支招!
其实drawKeypoints默认绘制的是空心的关键点标记,要改成实心圆的话,有两种简单的方法:
方法一:手动遍历关键点,用cv2.circle绘制实心圆
这种方法最直观,能让你完全控制每个圆的样式:
- 先获取Blob检测得到的
keypoints列表 - 遍历每个关键点,调用
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
相关产品推荐
相关产品推荐

