민자의 지식창고

이미지 Contour 본문

개발노트/OpenCV

이미지 Contour

전지적민자시점 2020. 7. 27. 17:02

이미지 Contour

Contour 란 같은 값을 가진 곳을 연결한 선

이미지 Contour란 동일한 색 또는 동일한 색상 강도(Color Intensity)를 가진 부분의 가장 자리 경걔를 연결한 선

예를들어 지도의 등고선과 기상도와 같이 동일 선 상을 연결한 선

 

이미지 Counter는 이미지에 있는 물체의 모양 분석이나 객체 인식등에 유용하게 활용되는 도구 

보다 정확한 이미지 Contour를 확보하기 위해 바이너리 이미지를 사용 합니다.

이미지에서 Contour를 찾기 전에 Threadhold나 edge Dectection을 적용하는 것이 좋습니다.

 

OpenCV의 cv2.findContours()함수는 Suzuki85 알고리즘을 이용해서 이미지의 Contour를 찾는 함수 입니다.

이 함수는 원본 이미지를 변경시키기 때문에 향후 원본 이미지를 활용하기 위해서는 원본 이미지의 복사본을 가지고 Contour를 찾는게 좋습니다.

 

OpenCV의 Contour는 검정색 배경에서 흰색 물체를 찾는것과 동일 합니다. 따라서 Contour를 찾고자 하는 대상은 흰색으로, 배경은 검정색으로 변경 해야 함.

import numpy as np
import cv2

def contour():
    img = cv2.imread('D:/2020/test2.jpg')
    imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    ret, thr = cv2.threshold(imgray, 127, 255, 0)

    contours, high  = cv2.findContours(thr, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    
    cv2.drawContours(img, contours, -1, (0,0,255), 1)
    cv2.imshow('thresh', thr)
    cv2.imshow('contour', img)
    
    cv2.waitKey(0)
    cv2.desertAllWindows()
    
contour()

경계값

cv2.findContours(thr cv2,RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

cv2.findContours()함수의 첫번쨰 인자는 threshold된 이미지, 이미지에서 찾은 contour와 contour들 간의 계층 구조를 리턴 합니다.

첫번째 인자 : contour할 이미지, threshold를 통해서 변환된 바이너리 이미지

두번째 인자 :  contour 추출 모드 , 2번째 리턴값이 Hierarachy의 값에 영향을 줌

 cv2.RETR_TREE : 이미지의 모든 Contour를 추출하고, Contour들간의 상관 관계 추출

 cv2.RETR_EXTERNAL : 이미지의 가장 바깥쪽의 Contour만 추출

 cv2.RETR_LIST : contour간 계층구조 상관관계를 고려하지 않고 contour 추출

 cv2.RETR_CCOMP : 이미지에서 모든 contour를 추출한 후, 2단계 계층에서 구멍(hole)의 경계 부분을 나타내는 contoru 구성

 

728x90

'개발노트 > OpenCV' 카테고리의 다른 글

텍스트 찾기(Text Detection)  (0) 2020.08.07
모폴로지연산  (0) 2020.08.04
CNN모델을 이용한 숫자 인식하기  (0) 2020.07.27
이미지 필터링 -blur  (1) 2020.07.27
Otsu' Binarization  (0) 2020.07.24