2017-05-01 18 views
-1

내가 이것을 읽고 :opencv를 사용하여 침식/팽창을 어떻게 사용하지만 connectedComponentsWithStas를 사용하여 점을 제거합니까?

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

:

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

침식/팽창 제안하고, 그냥 궁금가 connectedComponectsStats를 사용하여 같은 일을 할 수 있습니다 내가 검색 좀이있어

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 (매우 작아야한다)에 의해 생산된다고 생각한다. 나는이 작은 polygon을 없애는 방법을 모른다. controid와 boudaries를 손에두고, 나는 단지 사각형을 제거 할 수있다. 맞지 않니, 뭔가 잘못 이해 했나요? –

+0

영역은 형상 영역에 해당합니다. 반드시 윤곽 일 필요는 없습니다. 점으로 정확히 무엇을 의미합니까? 이미지를 업로드 할 수 있습니까? –

답변

1

이 같은 것을 할 수 connectedComponentsWithStats 사용 :

Result image

이 일을합니까 : 업로드 한 이미지의

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) 

을, 나는 결과로이있어 너를 위해서? 나는 connectedComponentsWithStats를 부르기 전에 팽창/침식이 도움이 될 것이라고 생각하지만, 당신이 결정할 수 있도록 남겨 두었습니다.