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

求Python实现照片球体检测、尺寸换算及间距测量的最简方案

高对比度球体检测+自动测距Python实现方案

核心依赖库

仅需两个核心库即可完成全流程,无需复杂深度学习框架,非编程人员也能快速上手:

  • opencv-python:内置成熟的霍夫圆变换算法,专门适配高对比度背景下的圆形几何图形检测,无需训练模型
  • numpy:配套做基础数值计算
    可选依赖:matplotlib 用于调试阶段可视化检测结果,批量处理时可移除

实现逻辑(无人工干预全自动化)

你的场景属于规则几何图形+固定实际尺寸+高对比度背景,逻辑非常简洁:

  1. 图像预处理:读入图像后转灰度图,做高斯模糊降噪,过滤背景杂点避免干扰检测
  2. 球体检测:调用霍夫圆检测接口,直接输出所有球体的圆心像素坐标、球体像素半径
  3. 比例尺计算:取所有检测到的球体的半径平均值,计算得到球体平均像素直径,结合已知的1cm实际直径,得到图像的厘米/像素换算比例
  4. 实际距离计算:任意两个球体的圆心像素距离乘以比例尺,即可得到二者的实际物理距离

最简可运行代码

import cv2
import numpy as np
# ========== 可调参数(同批次图像调整1次即可固定使用) ==========
# 球体最小/最大像素半径,根据你的图像实际大小填写大概范围即可
MIN_RADIUS = 5
MAX_RADIUS = 100
# 检测灵敏度:数值越高检测越严格,误检越少;出现漏检可适当调低
DETECT_SENSITIVITY = 30
# 两个球体的最小间隔(像素),避免同一个球被重复检测
MIN_DISTANCE = 2 * MIN_RADIUS
# =================================================================
def process_image(img_path):
    # 读入图像并预处理
    img = cv2.imread(img_path)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    gray_blur = cv2.GaussianBlur(gray, (5, 5), 0)
    # 检测所有圆形球体
    circles = cv2.HoughCircles(
        gray_blur,
        method=cv2.HOUGH_GRADIENT,
        dp=1,
        minDist=MIN_DISTANCE,
        param1=50,
        param2=DETECT_SENSITIVITY,
        minRadius=MIN_RADIUS,
        maxRadius=MAX_RADIUS
    )
    if circles is None:
        return None, None, None
    circles = np.uint16(np.around(circles))[0]
    # 计算图像比例尺(单位:cm/像素)
    avg_radius_pix = np.mean([c[2] for c in circles])
    scale = 1 / (avg_radius_pix * 2)
    # 示例:计算前两个球体的实际距离,可根据需求替换为任意两个球的索引
    real_distance = None
    if len(circles) >= 2:
        x1, y1 = circles[0][0], circles[0][1]
        x2, y2 = circles[1][0], circles[1][1]
        pix_dist = np.sqrt((x1 - x2)**2 + (y1 - y2)**2)
        real_distance = pix_dist * scale
    return circles, scale, real_distance
# 调用示例
if __name__ == "__main__":
    circles, scale, real_dist = process_image("你的图像文件路径.jpg")
    print(f"当前图像比例尺:{scale:.6f} cm/像素")
    if real_dist:
        print(f"示例两个球体的实际距离:{real_dist:.2f} cm")

调参说明

同光照同拍摄距离的批次照片仅需调整一次参数即可通用:

  • 先根据图像中球体的大概大小填写MIN_RADIUS和MAX_RADIUS,排除明显不是球体的检测结果
  • 调整DETECT_SENSITIVITY:如果出现非球体的杂点被误检为圆,就调高数值;如果有球体没被检测到,就调低数值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:24:02