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

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

相关推荐
晚霞的不甘14 分钟前
CANN 在工业质检中的亚像素级视觉检测系统设计
人工智能·计算机视觉·架构·开源·视觉检测
island131415 分钟前
CANN HIXL 高性能单边通信库深度解析:PGAS 模型在异构显存上的地址映射与异步传输机制
人工智能·神经网络·架构
前端摸鱼匠28 分钟前
YOLOv8 环境配置全攻略:Python、PyTorch 与 CUDA 的和谐共生
人工智能·pytorch·python·yolo·目标检测
结局无敌33 分钟前
构建百年工程:cann/ops-nn 的可持续演进之道
人工智能·cann
MSTcheng.34 分钟前
CANN算子开发新范式:基于ops-nn探索aclnn两阶段调用架构
人工智能·cann
renhongxia134 分钟前
如何基于知识图谱进行故障原因、事故原因推理,需要用到哪些算法
人工智能·深度学习·算法·机器学习·自然语言处理·transformer·知识图谱
做人不要太理性35 分钟前
CANN Runtime 运行时与维测组件:异构任务调度、显存池管理与全链路异常诊断机制解析
人工智能·自动化
算法备案代理37 分钟前
大模型备案与算法备案,企业该如何选择?
人工智能·算法·大模型·算法备案
酷酷的崽79837 分钟前
CANN 生态可维护性与可观测性:构建生产级边缘 AI 系统的运维体系
运维·人工智能
哈__38 分钟前
CANN加速Inpainting图像修复:掩码处理与边缘融合优化
人工智能