2016-07-14 3 views

답변

3

윤곽선을 찾는 동안 회색 점선을 포함하도록 grayScale 이미지의 임계 값을 조정하면됩니다. 입력 이미지의 주요 부분이 흰색이므로 255에 가까운 임계 값, 예를 들어 230을 선택할 수 있습니다. 그리고 그런 다음 윤곽선을 thresholding 찾으십시오.

대략적인 다항식 모양을 계산하려면 cv2.approxPolyDP을 사용할 수 있지만 많은 도움이되지 않으므로이 단계는 선택 사항입니다.

코드 조각은 다음과 같이 보일 수 있습니다 :

import cv2 

img = cv2.imread("/Users/anmoluppal/Downloads/1tl6D.jpg") 

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 

ret, thresh = cv2.threshold(img_gray, 230, 255, cv2.THRESH_BINARY_INV) 

img_, contours, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 

largest_contour_area = 0 
for cnt in contours: 
    if (cv2.contourArea(cnt) > largest_contour_area): 
     largest_contour_area = cv2.contourArea(cnt) 
     largest_contour = cnt 

epsilon = 0.001*cv2.arcLength(largest_contour,True) 
approx = cv2.approxPolyDP(largest_contour,epsilon,True) 

final = cv2.drawContours(img, [approx], 0, [0, 255, 0]) 

enter image description here

+0

신난다. 5 번째 줄을 다음과 같이 바꿉니다 : contours, hierarchy = cv2.findContours (...) 및 윤곽선이 비어 있으면 larger_contour가 지정되지 않습니다. –

+0

'cv2.findContours'는 Opencv 3.1에서 3 개의 값을 반환하지만 Opencv2.7에서는 2 개의 값만 반환합니다. 그 점은 버전에 따라 다르기 때문에 무시할 필요가있는 이미지에 약간의 작은 궤적이있을 가능성이 있기 때문에 가장 큰 윤곽을 계산해야합니다. – ZdaR

+0

그런 다음. 가장 큰 윤곽선에 대해서는 '윤곽선'이 비어있는 경우를 의미합니다 ... –

관련 문제