2017-05-01 77 views
-1

我已阅读本:随着opencv,如何使用不侵蚀/膨胀,但connectedComponentsWithStas删除点?

Remove spurious small islands of noise in an image - Python OpenCV

侵蚀/扩张的建议,只是不知道是否有可能通过使用connectedComponectsStats做同样的事情,我用Google搜索,有这些:

http://www.itkeyword.com/doc/5188188731707068417/how-to-use-opencvs-connected-components-with-stats-in-python

http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_features_harris/py_features_harris.html#corner-with-subpixel-accuracy

但这些,我无法弄清楚如何删除点,所以请你告诉我该怎么做,比ks提前!

更新: 我真正想要做的是通过删除小点从吹图像中提取人体形状。

demo image

+0

使用统计信息,您可以使用标记'cv2.CC_STAT_AREA'来删除其区域的点。此外,如果您知道要移除的点的位置,则可以使用“质心”。我不太明白你不明白的地方。 –

+0

@ RickM。,谢谢,我认为一个区域是由一个ploygon产生的(应该很小),我不知道如何去除这个小多边形。手中有controid和badaries,我只能删除一个矩形,am我是对还是我误解了一些东西? –

+0

该区域对应于轮廓的区域。这并不一定是轮廓。你究竟是什么意思的点?你能上传图片吗? –

回答

1

使用connectedComponentsWithStats你可以做这样的事情:

img = cv2.imread(directory + "canny.png") 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
labelnum, labelimg, contours, GoCs = cv2.connectedComponentsWithStats(gray) 
for label in xrange(1, labelnum): 
    x,y,w,h,size = contours[label] 
    if size <= 50: 
     img[y:y+h, x:x+w] = 0 
cv2.imwrite(directory + "cca_image.png", img) 

对于你上传的图片,我得到这个作为结果:

Result image

这是否工作为你?我想在打电话给connectedComponentsWithStats之前想扩张/侵蚀会有所帮助,但我会留下让你决定的。