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()
相关推荐
鳄鱼的眼药水23 分钟前
TT100K数据集, YOLO格式, COCO格式
人工智能·python·yolo·yolov5·yolov8
Tomorrow'sThinker24 分钟前
25年1月更新。Windows 上搭建 Python 开发环境:Python + PyCharm 安装全攻略(文中有安装包不用官网下载)
开发语言·python·pycharm
掐死你滴温柔4 小时前
SQLALchemy如何将SQL语句编译为特定数据库方言
数据结构·数据库·python·sql
西猫雷婶4 小时前
python学opencv|读取图像(二十三)使用cv2.putText()绘制文字
开发语言·python·opencv
陈序缘8 小时前
PyTorch快速入门
人工智能·pytorch·python·深度学习·算法·机器学习
编程梦想家(大学生版)8 小时前
使用Python和OpenCV进行视觉图像分割
开发语言·python·opencv
KeyPan8 小时前
【视觉SLAM:四、相机与图像】
人工智能·深度学习·数码相机·算法·机器学习·计算机视觉
M姐实验室9 小时前
分类模型评估利器-混淆矩阵
人工智能·python·矩阵·分类
Quz9 小时前
图像概念与分类
人工智能·opencv·计算机视觉
是Dream呀9 小时前
Python从0到100(八十一):神经网络-Fashion MNIST数据集取得最高的识别准确率
开发语言·python·神经网络