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

如何用Python检测同心圆以测量电力电缆横截面各层厚度

电力电缆横截面分层厚度测量实现

参考与原始图像

现有电力电缆横截面图像,需要测量电缆每一层的厚度,相关参考示意图如下:
电缆分层参考示意图

待检测的电缆原始横截面图像如下:
电缆横截面原始图1
电缆横截面原始图2

Hough圆检测实现代码

以下是基于OpenCV霍夫圆变换检测同心圆的实现代码,可提取各层轮廓的半径,相邻半径差值即为对应层的像素厚度,结合尺寸标定即可换算为实际厚度:

import numpy as np
import cv2

# 读取灰度图和彩色原图
image = cv2.imread("GoldenSpike.png",0)
output = cv2.imread("GoldenSpike.png",1)

# 展示原图
cv2.imshow("Original image", image)
cv2.waitKey()

# 高斯模糊降噪
blurred = cv2.GaussianBlur(image,(11,11),0)
cv2.imshow("Blurred image", blurred)
cv2.waitKey()

setItem=set()
previous=0
minR=4
# 循环调整半径检测范围,覆盖所有可能的圈层
for maxR in range(9,300,9):
    # 使用霍夫变换在灰度图中检测圆形
    circles = cv2.HoughCircles(blurred, cv2.HOUGH_GRADIENT, 1, 100,
                             param1=100,param2=100,minRadius=minR,maxRadius=maxR)
    minR+=4
    # cv2.HoughCircles的参数较多,可查阅官方文档了解详情,也可在Jupyter Notebook中执行cv2.HoughCircles?查看参数说明

    # 判断是否检测到圆形
    if circles is not None:
        # 如果有检测结果,将圆心坐标和半径转换为整数
        circles = np.round(circles[0, :]).astype("int")

        for (x, y, r) in circles:
            # 在输出图像上绘制检测到的圆形
            cv2.circle(output, (x, y), r, (0,255,0), 1)
            # 在输出图像上绘制圆心标记(矩形点)
            cv2.rectangle(output, (x - 2, y - 2), (x + 2, y + 2), (0,255,0), -1)
            setItem.add(r)

# 对检测到的半径排序输出
lst=sorted(setItem)
print("检测到的圈层数量 =", len(lst))
for item in lst:
    print(f"圈层半径:{item} 像素")

# 展示检测结果并保存
cv2.imshow("Detections",output)
cv2.imwrite("CirclesDetection.jpg",output)
cv2.waitKey()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:06:03