首页 > 解决方案 > 在 Python 中从阈值图像中去除小轮廓和噪声

问题描述

是否有任何方法或函数可以通过 Python 中的 OpenCV 去除已经阈值化的图像的小轮廓?我的目标是只让矩形并很快将这些重叠的分开:

在此处输入图像描述

在此处输入图像描述

标签: pythonimage-processingimage-segmentationopencv-contour

解决方案


如果您尝试删除的 blob 与您要保留的 blob 相比较小,一种方法是在 blob 周围绘制边界框并使用边界框的区域丢弃不需要的 blob。

    cnts = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    cnts = imutils.grab_contours(cnts)
    cnts = sorted(cnts, key=cv2.contourArea, reverse=True)
    rect_areas = []
    for c in cnts:
        (x, y, w, h) = cv2.boundingRect(c)
        rect_areas.append(w * h)
    avg_area = mean(rect_areas)
    for c in cnts:
        (x, y, w, h) = cv2.boundingRect(c)
        cnt_area = w * h
        if cnt_area < 0.5 * avg_area:
            img[y:y + h, x:x + w] = 0

在这里,我要删除面积小于平均面积一半的斑点。您可以通过实验将此值设置为您想要的值。


推荐阅读