opencv python 图像处理 获取连通域 并删除小面积连通域 其余连通域框出来
时间: 2024-01-14 18:03:54 浏览: 282
获取图像的连通域可以使用`cv2.connectedComponentsWithStats()`方法,该方法返回每个连通域的标签、面积、宽度、高度和左上角坐标等信息。然后可以根据面积大小筛选出需要保留的连通域,并使用`cv2.rectangle()`方法框出这些连通域。
下面是一个示例代码:
```python
import cv2
# 读取图像
img = cv2.imread('image.png', cv2.IMREAD_GRAYSCALE)
# 二值化处理
_, thresh = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)
# 获取连通域信息
num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(thresh)
# 筛选出需要保留的连通域
min_area = 100 # 最小面积阈值
keep_labels = []
for i in range(1, num_labels):
area = stats[i, cv2.CC_STAT_AREA]
if area >= min_area:
keep_labels.append(i)
# 框出保留的连通域
for label in keep_labels:
x, y, w, h = stats[label, cv2.CC_STAT_LEFT], stats[label, cv2.CC_STAT_TOP], stats[label, cv2.CC_STAT_WIDTH], stats[label, cv2.CC_STAT_HEIGHT]
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们首先读取图像并进行二值化处理,然后使用`cv2.connectedComponentsWithStats()`方法获取连通域信息。接着,我们根据面积大小筛选出需要保留的连通域,并使用`cv2.rectangle()`方法框出这些连通域。最后,我们显示处理后的图像。
注意,上面的代码中我们设定了一个最小面积阈值`min_area`,面积小于该阈值的连通域将被删除。您可以根据自己的需求调整该阈值。
阅读全文