找到cv2.findContours()的面积(Python,OpenCV)

5

我正在尝试找到/计算下图中的轮廓面积:

contour

目标是删除图像中所有可见的点,使轮廓面积小于我给出的值的斑点被分割出来。

removal

我该如何设置?

这是我使用的代码...

import cv2

im = cv2.imread('source.png')
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

img = cv2.drawContours(im, contours, -1, (0,255,0), 1)

cv2.imshow('contour',img)
cv2.waitKey(0)
cv2.imwrite('contour.png',img)

...这是图像:

origin

谢谢

2个回答

9
您可以使用cv2.contourArea()来决定绘制哪一个:
for contour in contours:
    if cv2.contourArea(contour) < 80:
        cv2.drawContours(im, contour, -1, (255, 255, 255), 3)

但是这会绘制轮廓还是填充它们?我认为是后者...对吗? - lucians
2
使用-1作为宽度进行填充。也许尝试做两次,即一次填充和一次使用3。您还可以尝试在二值化之前对图像进行模糊处理。 - Martin Evans

2
有多种方法可以做到这一点。其中一种方法是找到边界矩形的面积。
for contour in contours:
   rect = cv2.boundingRect(contour)
   area = rect[2] * rect[3]

谢谢。但是如何删除它们?我想在for循环内部需要一个if语句..我的意思是,我不知道指令。 我在这里看到(http://answers.opencv.org/question/31433/remove-contoursbounding-rect-with-an-area-n/)存在一个`contours.erase`指令。但是在Python中呢? - lucians
本来想把blob填充成白色,但是答案已经出现了 :) - lucians
@Link 这就是为什么我留了点事情给你做,但是有人比你先完成了。 :D - zindarod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接