2017-09-29 3 views
0

:찾기 지역() (파이썬, OpenCV의) 내가 찾기/다음 이미지의 윤곽 영역 계산하기 위해 노력하고

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

가 당신에게

답변

1

당신은 그릴 결정하는 cv2.contourArea()를 사용할 수 있습니다

for contour in contours: 
    if cv2.contourArea(contour) < 80: 
     cv2.drawContours(im, contour, -1, (255, 255, 255), 3) 
+0

그러나 이것은 등고선을 그리거나 채우고 있습니까? 내 생각 엔 두 번째 ... 맞지? – Link

+1

'-1'을 너비로 사용하여 채 웁니다. 아마도 한 번만 채우고 다른 하나는'3'으로 두 번 시도해보십시오. 또한 임계 값 이전에 이미지를 흐리게 처리 할 수도 있습니다. –

1

감사 이 작업을 수행하는 여러 가지 방법이 있습니다. 한 가지 방법은 경계 사각형의 영역을 찾는 것입니다.

for contour in contours: 
    rect = cv2.boundingRect(contour) 
    area = rect[2] * rect[3] 
+0

감사합니다. 그러나 그들을 삭제하는 방법? for 루프 안에'if'가 필요하다고 가정합니다. 나는 명령을 모른다. 'contours.erase' 명령이있는 것을 [여기] (http://answers.opencv.org/question/31433/remove-contoursbounding-rect-with-an-area-n/)에서 보았습니다. 하지만 파이썬에서? – Link

+1

@Link 물론 아웃 라이어를 제거하기 위해서는'if'가 필요합니다. 당신은 지금 당장 직접 연구해야합니다. :) – zindarod

+0

흰색으로 얼룩을 채우기를 찾고 있었지만 대답이 도착했습니다. :) – Link

관련 문제