基于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. 图像预处理:有时在边缘检测前进行图像的平滑处理(如高斯模糊)可以减少噪声,提高检测效果。

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

相关推荐
碣石潇湘无限路几秒前
【奇点时刻】GPT-4o新生图特性深度洞察报告
人工智能·经验分享·chatgpt·gpt4o·新生图特性
深眸财经8 分钟前
从商汤科技年报,看一家AI企业的确定性叙事
人工智能·科技·百度
I'mFAN25 分钟前
QT_xcb 问题
人工智能·python·opencv·计算机视觉
赋创小助手37 分钟前
Gartner预计2025年AI支出达6440亿美元:数据中心与服务器市场的关键驱动与挑战
运维·服务器·人工智能·科技·架构
晨航1 小时前
AI Agent拐点已至,2B+2C星辰大海——行业深度报告
人工智能·ai·aigc
果冻人工智能1 小时前
只让 AI 写点坏代码,它却学坏了整颗心
人工智能
zy_destiny1 小时前
【工业场景】用YOLOv12实现饮料类别识别
人工智能·python·深度学习·yolo·机器学习·计算机视觉·目标跟踪
姚瑞南1 小时前
从模糊感知到量化评估:构建一个Prompt打分工具
人工智能·自然语言处理·chatgpt·prompt·aigc
机器之心1 小时前
ICLR 2025 Spotlight | 参数高效微调新范式!上海交大联合上海AI Lab推出参数冗余微调算法
人工智能