python检测同心圆

python检测同心圆

原图如下:

python 复制代码
import cv2
import numpy as np

# 读取图像
image_path = r"E:\pycharm3\pythonProject\image\image.png"
img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)  # 灰度图像
img_color = cv2.imread(image_path, cv2.IMREAD_COLOR)  # 彩色图像

# 检查图像加载
if img is None or img_color is None:
    print("图像加载失败,请检查文件路径是否正确:", image_path)
    exit()

# 第一次检测(较大圆)
circles1 = cv2.HoughCircles(
    img,
    cv2.HOUGH_GRADIENT,
    dp=1,
    minDist=60,
    param1=50,
    param2=60,
    minRadius=170,
    maxRadius=200
)

# 第二次检测(中等圆1)
circles2 = cv2.HoughCircles(
    img,
    cv2.HOUGH_GRADIENT,
    dp=1,
    minDist=170,
    param1=100,
    param2=60,
    minRadius=60,
    maxRadius=90
)

# 第三次检测(中等圆2,模糊图像)
blurred = cv2.GaussianBlur(img, (9, 9), 2)  # 高斯模糊处理
circles3 = cv2.HoughCircles(
    blurred,
    cv2.HOUGH_GRADIENT,
    dp=1,
    minDist=170,
    param1=100,
    param2=60,
    minRadius=60,
    maxRadius=150
)

# 第四次检测(较小圆,增强边缘特性)
edges = cv2.Canny(img, 50, 150)  # 使用 Canny 边缘检测
circles4 = cv2.HoughCircles(
    edges,
    cv2.HOUGH_GRADIENT,
    dp=1,
    minDist=30,
    param1=100,
    param2=60,
    minRadius=90,
    maxRadius=190

)

# 绘制检测结果
if circles1 is not None:
    circles1 = np.uint16(np.around(circles1))
    for i in circles1[0, :]:
        # 绘制第一个检测结果的圆
        cv2.circle(img_color, (i[0], i[1]), i[2], (255, 0, 0), 2)  # 蓝色圆
        cv2.circle(img_color, (i[0], i[1]), 2, (0, 255, 0), 3)  # 圆心
print(f"检测到大环外圆:中心=({i [0]}, {i[1]}), 半径={i[2]}")


if circles2 is not None:
    circles2 = np.uint16(np.around(circles2))
    for i in circles2[0, :]:
        # 绘制第二个检测结果的圆
        cv2.circle(img_color, (i[0], i[1]), i[2], (0, 255, 255), 2)  # 黄色圆
        cv2.circle(img_color, (i[0], i[1]), 2, (255, 0, 255), 3)  # 圆心
print(f"检测到小环内圆:中心=({i [0]}, {i[1]}), 半径={i[2]}")

if circles3 is not None:
    circles3 = np.uint16(np.around(circles3))
    for i in circles3[0, :]:
        # 绘制第三个检测结果的圆
        cv2.circle(img_color, (i[0], i[1]), i[2], (0, 0, 255), 2)  # 红色圆
        cv2.circle(img_color, (i[0], i[1]), 2, (255, 255, 0), 3)  # 圆心
print(f"检测到小环外圆:中心=({i [0]}, {i[1]}), 半径={i[2]}")

if circles4 is not None:
    circles4 = np.uint16(np.around(circles4))
    for i in circles4[0, :]:
        # 绘制第四个检测结果的圆
        cv2.circle(img_color, (i[0], i[1]), i[2], (0, 255, 0), 2)  # 绿色圆
        cv2.circle(img_color, (i[0], i[1]), 2, (255, 0, 0), 3)  # 圆心
print(f"检测到大环内圆:中心=({i [0]}, {i[1]}), 半径={i[2]}")

# 显示结果
cv2.imshow("Multiple Hough Circle Detection (4 times)", img_color)
cv2.imwrite("detected_circles_result.png",img_color )  # 保存结果到文件
# 等待退出
cv2.waitKey(0)
cv2.destroyAllWindows()
相关推荐
闻道且行之7 小时前
TurboOCR:基于PP-OCRv6的极速Windows离线OCR工具,深度解析3.4GB依赖背后的技术架构
c++·人工智能·python·qt·机器学习·ocr
许彰午8 小时前
95_Python内存管理与垃圾回收
开发语言·python
骄阳如火8 小时前
Python 性能深度剖析:从“被诟病的慢”到“Rust 重塑”的拐点
python
满怀冰雪9 小时前
03-第一个 Paddle 程序:Tensor 创建、计算与设备管理
人工智能·python·paddle
CClaris9 小时前
大模型量化从0到1(九):用 llama.cpp 把模型转成 GGUF 并跑本地推理
人工智能·pytorch·python·深度学习·llama
学编程的小虎9 小时前
SenseVoice微调
人工智能·python·自然语言处理
诸葛说抛光10 小时前
国内大型汽车改装展览会定展 佛山改装 佛山汽车赛事
python·汽车
chouchuang10 小时前
day-030-综合练习-笔记管理器
开发语言·笔记·python
乖巧的妹子10 小时前
Python基础核心知识点详解:内置函数、运算符、字符串方法、数据结构与类型转换
python
幸福清风11 小时前
Python 完美处理Excel合并单元格:拆分填充+自动合并
python·excel·合并单元格·拆分单元格