1
플로어 플랜 외부 윤곽을 얻는 가장 좋은 방법은 무엇입니까? 일부 평면도가 너무 볼록 때문에파이썬에서 평면도의 외부 윤곽을 얻는 방법은 무엇입니까?
뱀 알고리즘은 잘 작동하지 않습니다.
플로어 플랜 외부 윤곽을 얻는 가장 좋은 방법은 무엇입니까? 일부 평면도가 너무 볼록 때문에파이썬에서 평면도의 외부 윤곽을 얻는 방법은 무엇입니까?
뱀 알고리즘은 잘 작동하지 않습니다.
윤곽선을 찾는 동안 회색 점선을 포함하도록 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])
신난다. 5 번째 줄을 다음과 같이 바꿉니다 : contours, hierarchy = cv2.findContours (...) 및 윤곽선이 비어 있으면 larger_contour가 지정되지 않습니다. –
'cv2.findContours'는 Opencv 3.1에서 3 개의 값을 반환하지만 Opencv2.7에서는 2 개의 값만 반환합니다. 그 점은 버전에 따라 다르기 때문에 무시할 필요가있는 이미지에 약간의 작은 궤적이있을 가능성이 있기 때문에 가장 큰 윤곽을 계산해야합니다. – ZdaR
그런 다음. 가장 큰 윤곽선에 대해서는 '윤곽선'이 비어있는 경우를 의미합니다 ... –