从Python的阈值图像中去除小轮廓和噪声

问题描述 投票:0回答:1

是否存在通过Python中的OpenCV给定阈值图像的方法来消除较小的轮廓?我的目的只是让矩形很快就将这些重叠的矩形分开:

enter image description here

enter image description here

python image-processing image-segmentation opencv-contour
1个回答
0
投票

如果要删除的斑点与要保留的斑点相比较小,一种方法是在斑点周围绘制边界框,并使用边界框的面积丢弃不需要的斑点。

    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

在这里,我要删除面积小于平均面积一半的斑点。您可以根据需要为实验值设置该值。

© www.soinside.com 2019 - 2024. All rights reserved.