基于Canny边缘检测和轮廓检测

这段代码实现了基于Canny边缘检测和轮廓检测,从图像中筛选出面积较大的矩形,并使用OpenCV和Matplotlib显示结果。主要流程如下:

步骤详解:

  1. 读取图像

    python 复制代码
    img = cv2.imread('U:/1.png')

    使用cv2.imread()加载图像。

  2. 转换为灰度图像

    python 复制代码
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    使用cv2.cvtColor()将图像从BGR色彩空间转换为灰度图,以便后续处理。

  3. 边缘检测

    python 复制代码
    edges = cv2.Canny(gray, 50, 150)

    使用cv2.Canny()进行Canny边缘检测,检测图像中的边缘。

  4. 轮廓检测

    python 复制代码
    contours, hierarchy = cv2.findContours(edges, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

    使用cv2.findContours()检测图像中的轮廓。参数cv2.RETR_LIST用于提取所有轮廓,而cv2.CHAIN_APPROX_SIMPLE用于减少轮廓的点数(仅保留直线的端点)。

  5. 筛选矩形

    python 复制代码
    for cnt in contours:
        approx = cv2.approxPolyDP(cnt, 0.01 * cv2.arcLength(cnt, True), True)
        if len(approx) == 4:
            area = cv2.contourArea(cnt)
            if area > min_area:
                cv2.drawContours(img, [approx], 0, (0, 255, 0), 3)
    • 对每个轮廓进行多边形近似,使用cv2.approxPolyDP()方法。
    • 判断是否为矩形(即有4个顶点)。
    • 计算轮廓面积并筛选出面积较大的矩形(面积大于设定的min_area阈值)。
    • cv2.drawContours()绘制矩形轮廓,使用绿色((0, 255, 0))并设定线宽为3。
  6. 显示结果

    python 复制代码
    img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    fig, axes = plt.subplots(1, 2, figsize=(12, 6))
    axes[0].imshow(edges, cmap='gray')
    axes[0].set_title("Edges Detected")
    axes[0].axis('off')
    
    axes[1].imshow(img_rgb)
    axes[1].set_title("Rectangles Detected")
    axes[1].axis('off')
    
    plt.show()
    • 将最终结果(BGR图像)转换为RGB图像,以便正确显示。
    • 使用Matplotlib创建一个1行2列的子图,左图显示边缘检测结果,右图显示带有矩形框的原始图像。
    • plt.show()用于展示结果。

效果:

  • 边缘检测图像:显示了图像中所有的边缘。
  • 带有矩形的最终图像:显示了通过轮廓检测与面积筛选出的矩形,矩形用绿色框标注。

优化建议:

  1. min_area 阈值 :你可以根据图像内容调整min_area的值,以过滤掉较小的噪声。
  2. 矩形的筛选条件:除了长宽比、面积等条件,你还可以进一步结合矩形的位置、形态等特征进行更精确的筛选。
  3. 图像预处理:有时在边缘检测前进行图像的平滑处理(如高斯模糊)可以减少噪声,提高检测效果。

该代码适用于需要从图像中提取矩形区域的场景,特别适用于图像中具有明显边缘和几何形状的对象。

相关推荐
石去皿17 小时前
大模型面试常见问答
人工智能·面试·职场和发展
Java后端的Ai之路17 小时前
【AI大模型开发】-RAG 技术详解
人工智能·rag
墨香幽梦客17 小时前
家具ERP口碑榜单,物料配套专用工具推荐
大数据·人工智能
Coder_Boy_18 小时前
基于SpringAI的在线考试系统-考试系统DDD(领域驱动设计)实现步骤详解
java·数据库·人工智能·spring boot
敏叔V58718 小时前
从人类反馈到直接偏好优化:AI对齐技术的实战演进
人工智能
琅琊榜首202018 小时前
AI赋能短剧创作:从Prompt设计到API落地的全技术指南
人工智能·prompt
测试者家园18 小时前
Prompt、Agent、测试智能体:测试的新机会,还是新焦虑?
人工智能·prompt·智能体·职业和发展·质量效能·智能化测试·软件开发和测试
嗷嗷哦润橘_18 小时前
从萝卜纸巾猫到桌游:“蒸蚌大开门”的设计平衡之旅
人工智能·算法·游戏·概率论·桌游
悟纤18 小时前
Suno 爵士歌曲创作提示整理 | Suno高级篇 | 第22篇
大数据·人工智能·suno·suno ai·suno api·ai music
小北方城市网18 小时前
微服务注册中心与配置中心实战(Nacos 版):实现服务治理与配置统一
人工智能·后端·安全·职场和发展·wpf·restful