본문 바로가기
OpenCV/OpenCV-basic

opencv-findContours

by kiimy 2021. 12. 11.
728x90
# Counting Objects(contours 윤곽선, hierarchy 계층구조)
# cv2.findContours(이진화 이미지(mask), 검색 방법, 근사화 방법)
contours, hierarchy = cv.findContours(dst.copy(), cv.RETR_EXTERNAL, \
    cv.CHAIN_APPROX_SIMPLE)

# [contours[i]] = 윤곽선 표시
# cv.CHAIN_APPROX_SIMPLE 윤곽점들 단순화 수평, 수직 및 대각선 요소를 압축하고 끝점만 남김
print(contours) # 각 점으로 표시됨
print(hierarchy[0][1])

# cv2.drawContours(이미지, [윤곽선], 윤곽선 인덱스, (B, G, R), 두께, 선형 타입)
# 윤곽선 인덱스 -1 = 윤곽선 배열 모두를 의미
# [윤곽선], 0과 윤곽선, -1은 동일한 의미
for i in range(len(contours)):
    cv.drawContours(img, [contours[i]], -1, (0,0,255), 3)
    # cv.imshow('img', img)
    # cv.waitKey() == ord('q')

text = f'i found {len(contours)}' 
# cv.putText(img, text, '좌측 상단 모서리(org)', fontFace, fontScale, color, 굵기)
cv.putText(img, text, (20,25), cv.FONT_HERSHEY_SIMPLEX, 0.7,(240, 0, 159), 2)
cv.imshow('contours', img)
cv.waitKey()
 
# 계층 구조는 윤곽선을 포함 관계의 여부를 나타낸다
외곽 윤곽선, 내곽 윤곽선, 같은 계층 구조를 구별할 수 있다.
* hierarchy.shape = (1, 6, 4)
[[[ 1 -1 -1 -1]
  [ 2  0 -1 -1] => hierarchy[0][1]
  [ 3  1 -1 -1]
  [ 4  2 -1 -1]
  [ 5  3 -1 -1]
  [-1  4 -1 -1]]]
[다음 윤곽선, 이전 윤곽선, 내곽 윤곽선, 외곽 윤곽선]
* 다음 윤곽, 이전 윤곽 = -1이 아니면 동등한 계층에 있다 <=> -1이면 동등한 계층 없다
* 내곽 윤곽 = 1은 도형 내부에 윤곽선이 있다(내부 도형이 있음)
* 외곽 윤곽 = 0은 내부 도형에서 외곽 윤곽이 있을 때
 

## cv2.findContours(이진화 이미지, 검색 방법, 근사화 방법)

# 검색 방법Permalink
cv2.RETR_EXTERNAL : 외곽 윤곽선만 검출하며, 계층 구조를 구성하지 x
cv2.RETR_LIST : 모든 윤곽선을 검출하며, 계층 구조를 구성하지 x
cv2.RETR_CCOMP : 모든 윤곽선을 검출하며, 계층 구조는 2단계로 구성
cv2.RETR_TREE : 모든 윤곽선을 검출하며, 계층 구조를 모두 형성. (Tree 구조)
 
# 근사화 방법Permalink
cv2.CHAIN_APPROX_NONE : 윤곽점들의 모든 점을 반환
cv2.CHAIN_APPROX_SIMPLE : 윤곽점들 단순화 수평, 수직 및 대각선 요소를 압축하고 끝점만 남김
cv2.CHAIN_APPROX_TC89_L1 : 프리먼 체인 코드에서의 윤곽선으로 적용
cv2.CHAIN_APPROX_TC89_KCOS : 프리먼 체인 코드에서의 윤곽선으로 적용

 

1. cv.imread

2. cv.cvtcolor

3. cv.threshold

4. cv.findcontours

5. 각 contours의 점 cv.drawContours

=> for i in range(len(contour))

728x90

'OpenCV > OpenCV-basic' 카테고리의 다른 글

이미지 연산, 배열 정합(addWeighted)  (0) 2021.12.12
모폴로지 연산(Morphology)  (0) 2021.12.12
opencv-VideoCapture, VideoWriter  (0) 2021.12.11
opencv-HSV, YCrCb(특정 색 추출)  (0) 2021.12.11
opencv-basic  (0) 2021.12.11

댓글