python 求内轮廓

效果图

轮廓检测方法:

python 复制代码
import cv2
import numpy as np

# 创建画布
canvas_size = 500
img = np.zeros((canvas_size, canvas_size, 3), dtype=np.uint8)  # 可视化用彩色图像
binary = np.zeros((canvas_size, canvas_size), dtype=np.uint8)  # 处理用二值图像

# 定义多边形顶点(示例为五边形)
vertices = np.array([[100, 100], [400, 150], [350, 400], [150, 400], [50, 200]], dtype=np.int32)

# 绘制带厚度的白色多边形
cv2.polylines(img, [vertices], isClosed=True, color=(255, 255, 255), thickness=2)
cv2.polylines(binary, [vertices], isClosed=True, color=255, thickness=2)

# 轮廓检测
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 筛选内轮廓(具有父轮廓的)
inner_contours = []
if hierarchy is not None:
    hierarchy = hierarchy[0]  # 去除外层维度
    for i, (_, _, _, parent_idx) in enumerate(hierarchy):
        if parent_idx != -1:  # 存在父轮廓的即为内轮廓
            inner_contours.append(contours[i])

# 处理找到的第一个内轮廓
if inner_contours:
    # 使用多边形近似算法
    epsilon = 0.01 * cv2.arcLength(inner_contours[0], True)
    approx = cv2.approxPolyDP(inner_contours[0], epsilon, True)

    # 提取顶点坐标
    inner_vertices = approx.reshape(-1, 2)

    # 可视化标记
    for (x, y) in inner_vertices:
        cv2.circle(img, (x, y), 2, (0, 0, 255), -1)  # 红色标记顶点
        cv2.putText(img, f"({x},{y})", (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)

# 显示结果
cv2.imshow('Polygon with Inner Vertices', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 输出顶点坐标
if inner_contours:
    print("内轮廓顶点坐标:")
    print(inner_vertices)
else:
    print("未检测到内轮廓")
相关推荐
学习baba酱2 分钟前
关于Python+selenium+chrome编译为exe更换电脑无法打开问题
chrome·python·selenium
土拨鼠不是老鼠15 分钟前
windows 下用yolov5 训练模型 给到opencv 使用
人工智能·opencv·yolo
几道之旅17 分钟前
pytdx数据获取:在线获取和离线获取(8年前的东西,还能用吗?)
python
jay神39 分钟前
基于Python+YOLO模型的手势识别系统
开发语言·python·深度学习·yolo·手势识别系统
视觉AI1 小时前
Jetson系统烧录与环境配置全流程详解(含驱动、GCC、.Net设置)
linux·人工智能·ubuntu·计算机视觉·.net
点云兔子1 小时前
使用 OpenCV 实现 ArUco 码识别与坐标轴绘制
人工智能·python·opencv
摆烂仙君2 小时前
单目视觉测量及双目视觉测量
人工智能·深度学习·计算机视觉
覆东流2 小时前
Python语法特点与编码规范
python
Want5953 小时前
Python炫酷烟花
开发语言·python·pygame
老歌老听老掉牙3 小时前
Python 脚本执行命令的深度探索:方法、示例与最佳实践
python·命令