使用cv2.threshold得到二值图像 二值图像中 计算白色区域 若白色区域面积小于4个像素 则将该区域变为黑色 opencv python
时间: 2024-02-20 08:02:38 浏览: 109
图像处理Task05图像分割/二值化
要将二值图像中小于4个像素的白色区域变为黑色,可以使用cv2.threshold()函数先将灰度图像二值化,然后使用cv2.connectedComponentsWithStats()函数来获取每个连通区域的面积,并通过遍历连通区域的方式找到小于4个像素的白色区域。具体实现如下:
``` python
import cv2
import numpy as np
# 读取灰度图像
img = cv2.imread('gray_image.png', cv2.IMREAD_GRAYSCALE)
# 将灰度图像二值化
ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# 获取连通区域信息
ret, labels, stats, centroids = cv2.connectedComponentsWithStats(thresh, connectivity=8)
# 遍历连通区域
for i in range(1, ret):
# 获取当前连通区域的面积
area = stats[i, cv2.CC_STAT_AREA]
# 如果面积小于4个像素,则将该区域变为黑色
if area < 4:
labels[labels == i] = 0
# 将处理后的连通区域标签图转换为二值图像
img[labels == 0] = 0
img[labels > 0] = 255
# 显示结果
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,首先使用cv2.threshold()函数将灰度图像二值化。然后使用cv2.connectedComponentsWithStats()函数获取连通区域信息。接着遍历连通区域,获取每个连通区域的面积,如果面积小于4个像素,则将该区域在标签图中对应的像素值赋为0,也就是将该区域变为黑色。最后将处理后的标签图转换为二值图像,并显示结果。
阅读全文