2014-04-08 2 views
2

다음은 OpenCV에서 반환하는 등고선 구조입니다. 대단히 중첩 된 튜플의 첫 번째 요소는 윤곽선의 점 목록입니다.opencv의 윤곽선을 2 차원 점 목록으로 변환

이것을 2d 포인트 목록 (nx2)으로 변환 하시겠습니까? 내 생각에 numpy.reshape을 사용할 수는 있지만 매우 일반적인 방법을 찾지 못했습니다. 감사. cv2.findContours 실제로이 개 항목을 반환한다는

contours = cv2.findContours(bw_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 
contours => 
    ([array([[[ 19, 20]], 

    [[ 18, 21]], 

    [[ 17, 21]], 

    [[ 17, 22]], 

    [[ 16, 23]], 

    [[ 16, 130]], 

    [[ 17, 131]], 

    [[ 17, 132]], 

    [[ 21, 132]], 

    [[ 43, 110]], 

    [[ 44, 110]], 

    [[ 75, 141]], 

    [[ 81, 141]], 

    [[109, 113]], 

    [[145, 149]], 

    [[149, 149]], 

    [[149, 21]], 

    [[148, 21]], 

    [[147, 20]]], dtype=int32)], array([[[-1, -1, -1, -1]]], dtype=int32)) 
+1

여기서 약간 익숙해 져야합니다. 등고선은 주문 된 * 점 목록입니다. 만약 당신이 가서 모든 것을 하나의리스트에 합치면, 당신은 그 순서를 파괴 할 수 있습니다. – berak

답변

4
import numpy as np 

contours, hierarchy = cv2.findContours(bw_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 
contours = np.vstack(contours).squeeze() 

참고. 여기 "윤곽선"이 목록입니다. 따라서 우리는 numpy의 vstack()을 사용하여 함께 쌓은 다음 squeeze()을 입력하여 중복 축을 제거합니다.

관련 문제