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()
相关推荐
噎住佩奇9 小时前
(Win11系统)搭建Python爬虫环境
爬虫·python
撬动未来的支点9 小时前
【AI】光速理解YOLO框架
人工智能·yolo·计算机视觉
basketball6169 小时前
python 的对象序列化
开发语言·python
rgeshfgreh10 小时前
Python流程控制:从条件到循环实战
前端·数据库·python
luoluoal10 小时前
基于python大数据的电影市场预测分析(源码+文档)
python·mysql·django·毕业设计·源码
幻云201010 小时前
Python深度学习:从入门到实战
人工智能·python
Zoey的笔记本11 小时前
敏捷与稳定并行:Scrum看板+BPM工具选型指南
大数据·前端·数据库·python·低代码
开开心心就好12 小时前
图片格式转换工具,右键菜单一键转换简化
linux·运维·服务器·python·django·pdf·1024程序员节
骥龙12 小时前
1.2下、工欲善其事:物联网安全研究环境搭建指南
python·物联网·安全
Lxinccode12 小时前
BUG(20) : response.text耗时很久, linux耗时十几秒, Windows耗时零点几秒
python·bug·requests·response.text·response.text慢