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

OpenCV圆形检测:空心圆填充及圆心坐标显示功能修复求助

问题解决:填充空心圆并显示圆心坐标

你的代码核心逻辑没问题,但存在文字颜色与填充色冲突的问题——填充后的圆是白色(255),文字也用白色(255)绘制,导致文字完全看不见。以下是修正后的代码和关键说明:

修正后的代码

import cv2
import numpy as np

# 读取图像并转为灰度图
im_in = cv2.imread("circle.jpg", cv2.IMREAD_GRAYSCALE)

# 二值化处理
th, im_th = cv2.threshold(im_in, 127, 255, cv2.THRESH_BINARY)

# 洪水填充背景区域
im_floodfill = im_th.copy()
h, w = im_th.shape[:2]
mask = np.zeros((h+2, w+2), np.uint8)
cv2.floodFill(im_floodfill, mask, (0, 0), 255)

# 反转填充结果,提取空心圆区域
im_floodfill_inv = cv2.bitwise_not(im_floodfill)
im_out = im_th | im_floodfill_inv

# 检测外部轮廓
contours, _ = cv2.findContours(im_out, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

# 将灰度图转为彩色图,避免文字与填充色冲突
im_out_color = cv2.cvtColor(im_out, cv2.COLOR_GRAY2BGR)

for contour in contours:
    M = cv2.moments(contour)
    if M["m00"] != 0:
        # 计算圆心坐标
        cX = int(M["m10"] / M["m00"])
        cY = int(M["m01"] / M["m00"])
        
        # 填充空心圆为白色
        cv2.drawContours(im_out_color, [contour], 0, (255, 255, 255), -1)
        
        # 绘制黑色圆心坐标,确保在白色背景上清晰可见
        cv2.putText(im_out_color, f'({cX}, {cY})', (cX - 30, cY - 10),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 2, cv2.LINE_AA)

# 保存结果图像
cv2.imwrite("circles_filled_with_coordinates.png", im_out_color)

关键修改说明

  • 解决文字不可见问题:将灰度图转为彩色图,用黑色((0,0,0))绘制坐标文字,与白色填充的圆形成鲜明对比,确保文字清晰显示。如果偏好灰度图,只需把putText的颜色参数改为0(黑色)即可。
  • 保留核心功能:洪水填充、轮廓检测、圆心计算的核心逻辑完全保留,确保填充和坐标计算的准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:06:28