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

效果图:

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


阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
你想使用 Python 和 OpenCV 提取二值化图像中的白色方格的区域,并且图像中存在很多噪点。
解决方案:
findContours 函数来找到图像中的轮廓。approxPolyDP 函数来近似为多边形。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()
这个代码将在图像中找到所有的白色方格,并将其包围框画出来。