2017-11-17 1 views
-1

OpenCV 3 및 Python 3을 사용하여 이미지 내 윤곽을 정렬하는 최적의 솔루션은 무엇입니까? 나는 이것을 시험해 본다. 최상의 솔루션입니까? OpenCV 3 및 Python 3을 사용하여 해당 영역별로 이미지의 윤곽을 정렬하는 최적의 솔루션

_, contours, _ = cv2.findContours(image , cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) 
areas = list(map(lambda c : cv2.contourArea(c), contours)) 
contoursWithAreas = zip(contours, areas) 
sortedContoursWithArea = sorted(contoursWithAreas, key=lambda s : s[1]) 
sortedContours ,sortedAreas = zip(*sortedContoursWithArea) 

마침내 우리는 sortedContours 변수 영역으로 윤곽을 분류했다.

답변

0

우리 모두 알다시피, 등고선은 np.ndarray의 목록입니다. 그래서 우리는 numpy 사용을 피할 수 없습니다. 그런 다음 np.argsort()을 사용하지 않으시겠습니까?

_, cnts, _ = cv2.findContours(threshed, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) 
areas = np.array([cv2.contourArea(cnt) for cnt in cnts]) 
idxs = areas.argsort() 
cnts2 = [cnts[i] for i in idxs] 
+0

파이썬 정렬 기능보다'np.argsort()'가 낫습니까? 그물에있는 사람들 사이에 어떤 비교가 있습니까? – Ahmad

+0

직접 비교할 수 있습니다. – Silencer

+0

맞습니다. 그러나 저는이 비교에 대해 더 알고 싶습니다. 여기에'stackoverflow'가 있습니다. 저는 제 자신과 함께 누군가이 사실에 대한 이유를 적어 주거나'sorted'와'argsort'에 대한 지식을 담고있는 링크를 보여줄 것이라고 생각합니다. 당신이 옳은 어떤 방법이긴하지만 내 질문에 대한 대답이 아닙니다. 그래서 저는 그것을 대답으로 표시하지 않습니다. – Ahmad

관련 문제