如果要删除的斑点与要保留的斑点相比较小,一种方法是在斑点周围绘制边界框,并使用边界框的面积丢弃不需要的斑点。
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
在这里,我要删除面积小于平均面积一半的斑点。您可以根据需要为实验值设置该值。