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

如何统计圆形内的点数?含多圆划分及半径-点数绘图需求

解决方案

1. 提取图像中的点坐标

先通过图像识别把图里的点坐标提取出来,用OpenCV就能实现:

import cv2
import numpy as np

# 读取图像并转灰度
img = cv2.imread('your_image.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理(阈值根据你的图像调整)
_, thresh = cv2.threshold(gray, 200, 255, cv2.THRESH_BINARY_INV)
# 检测点的轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 提取每个点的中心坐标
points = []
for cnt in contours:
    M = cv2.moments(cnt)
    if M['m00'] != 0:
        cx = int(M['m10']/M['m00'])
        cy = int(M['m01']/M['m00'])
        points.append((cx, cy))
points = np.array(points)

2. 定义圆形参数

根据需求设置圆心和要测试的半径范围,比如以图像中心为圆心,生成一系列递增的半径:

height, width = img.shape[:2]
center = (width//2, height//2)
# 生成半径列表,可自行调整范围和步长
radii = np.arange(10, 201, 10)

3. 统计每个圆内的点数

通过计算点到圆心的欧氏距离判断是否在圆内,然后统计数量:

point_counts = []
for r in radii:
    # 计算所有点到圆心的距离
    distances = np.sqrt((points[:, 0] - center[0])**2 + (points[:, 1] - center[1])**2)
    # 统计距离小于等于半径的点数
    count = np.sum(distances <= r)
    point_counts.append(count)

4. 绘制半径-点数关系图

用matplotlib生成可视化图表:

import matplotlib.pyplot as plt

plt.plot(radii, point_counts, marker='o', linestyle='-')
plt.xlabel('圆形半径')
plt.ylabel('圆内点数')
plt.title('半径与圆内点数的关系')
plt.grid(True)
plt.show()

额外提示

  • 如果图像背景干扰大,要调整二值化的阈值,或者用形态学操作(比如腐蚀/膨胀)先预处理图像;
  • 若需要多个不同圆心的圆,只需替换center为对应圆心坐标,重复统计步骤即可;
  • 要是点的尺寸较大,可以调整轮廓检测的参数,确保每个点只被计数一次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:01:17