python opencv之提取轮廓并拟合圆

图片存储地址为:C:\Users\Pictures\test.png,该图像图片背景是黑色的,目标区域是亮的,目标区域是两段圆弧和两段曲线构成的封闭区域,其中两段圆弧属于同一个圆,但在目标区域的相对位置,也就是不是相邻的,现在用python+opencv提取轮廓并拟合圆弧的圆心和半径。

1、拟合所有圆弧

python 复制代码
import cv2
import numpy as np
​
# 读取图像
image_path = r'C:\Users\Pictures\test.png'
image = cv2.imread(image_path)
​
# 转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
​
# 对图像进行二值化处理
_, threshold_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)
​
# 查找图像轮廓
contours, _ = cv2.findContours(threshold_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
​
# 迭代所有轮廓
for contour in contours:
    # 拟合轮廓为圆弧(仅拟合最小外接圆)
    (x, y), radius = cv2.minEnclosingCircle(contour)
​
    # 绘制圆弧
    cv2.circle(image, (int(x), int(y)), int(radius), (0, 255, 0), 2)
​
# 显示结果图像
cv2.imshow('Detected Arcs', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、拟合最大圆弧

python 复制代码
import cv2
import numpy as np
​
# 读取图像
image_path = r'C:\Users\Pictures\test.png'
image = cv2.imread(image_path)
​
# 转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
​
# 对图像进行二值化处理
_, threshold_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)
​
# 查找图像轮廓
contours, _ = cv2.findContours(threshold_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
​
max_radius = 0
max_circle_center = None
​
# 迭代所有轮廓
for contour in contours:
    # 拟合轮廓为圆弧(仅拟合最小外接圆)
    (x, y), radius = cv2.minEnclosingCircle(contour)
​
    if radius > max_radius:
        max_radius = radius
        max_circle_center = (int(x), int(y))
​
# 绘制最大半径的圆
cv2.circle(image, max_circle_center, int(max_radius), (0, 255, 0), 2)
​
# 在图像上标注圆心和直径
cv2.putText(image, f"Center: {max_circle_center}", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
cv2.putText(image, f"Diameter: {2 * max_radius}", (50, 100), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
​
# 显示结果图像
cv2.imshow('Detected Arcs', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
相关推荐
wuyk55536 分钟前
第2章:六步换相原理全解+STM32工程实战
c语言·开发语言·stm32·单片机·嵌入式硬件
hey_sml43 分钟前
JAVA每日一学---CompletableFuture中thenApply与thenCompose区别详解
java·开发语言
萧瑟余晖2 小时前
Java深入解析篇十七之SpringCloud
java·开发语言
北斗落凡尘2 小时前
LangGraph 入门实战(2)
python·langchain
ttod_qzstudio3 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
萧瑟余晖4 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
jufeng13074 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 1 篇】
人工智能·python·架构·agent
牧羊人.3334 小时前
计算机视觉基础|第2章 OpenCV图像基础操作(读写、窗口、像素操作)
人工智能·opencv·计算机视觉
月光船幽幽5 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
二十雨辰7 小时前
[Java]-Spring面试题
java·开发语言