2017-05-01 97 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之前想擴張/侵蝕會有所幫助,但我會留下讓你決定的。