모양 감지
전처리
# 파일 열기
image_path = 'shapes.webp'
image = cv.imread(image_path)
# 흑백 이미지로 변환
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
# 7x7 커널로 가우시안 블러링
blurred = cv.GaussianBlur(gray, (7, 7), 0)
# 이진화
th, bin = cv.threshold(blurred, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
# 보기
Image.fromarray(bin)
윤곽선 추출
검은 색 배경에서 하얀색 물체의 윤곽선을 추출
contours, hierarchy = cv.findContours(
bin.copy(), # 이미지, non-zero 픽셀을 객체로 간주
cv.RETR_EXTERNAL, # 윤곽선 검출 모드
cv.CHAIN_APPROX_SIMPLE) # 윤곽선 근사화 방법
# (SIMPLE: 꼭지점만, NONE: 모든 점)
- contours: 검출된 윤곽선 좌표.
- hierarchy: 윤곽선 계층 정보.
- 1, N, 4 형태의 행렬
- 마지막 차원은 [이전, 다음, 자식, 부모]를 나타냄(없으면 -1)