刘虾 2025-06-12 16:54 采纳率: 49.4%
浏览 14
已结题

python+opencv怎么提取二值化图像的白色方格的区域

python+opencv怎么提取二值化图像的白色方格的区域,同一行的方格是不是同一个高度的,不是平齐的,所有白色方格画一个区域包围,图像有很多噪点

img


效果图:

img

  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-06-12 16:54
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    提问解答

    你想使用 Python 和 OpenCV 提取二值化图像中的白色方格的区域,并且图像中存在很多噪点。

    解决方案:

    1. 使用 OpenCV 的 findContours 函数来找到图像中的轮廓。
    2. 对于每个轮廓,使用 approxPolyDP 函数来近似为多边形。
    3. 对于每个多边形,检查其是否是一个方形(即四个角点的距离相等)。
    4. 如果是一个方形,则将其作为一个区域,并使用 boundingRect 函数来计算其包围框。

    以下是一个示例代码:

    import cv2
    import numpy as np
    
    # 读取图像
    img = cv2.imread('image.png', cv2.IMREAD_GRAYSCALE)
    
    # 二值化图像
    _, thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
    
    # 找到轮廓
    contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    # 遍历每个轮廓
    for contour in contours:
        # 近似为多边形
        approx = cv2.approxPolyDP(contour, 0.02 * cv2.arcLength(contour, True), True)
        
        # 检查是否是一个方形
        if len(approx) == 4:
            # 计算包围框
            x, y, w, h = cv2.boundingRect(approx)
            cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
    
    # 显示结果
    cv2.imshow('Result', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    这个代码将在图像中找到所有的白色方格,并将其包围框画出来。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月13日
  • 修改了问题 6月12日
  • 修改了问题 6月12日
  • 创建了问题 6月12日