13장. Shape 분석과 ROI 처리
정리
- 모양 숫자는 12장의 윤곽선에서 시작합니다. 크기와 색이 같아도 꼭짓점 수, 원형도, 종횡비, 채움 비율, 볼록 비율로 모양을 가립니다.
cv2.approxPolyDP(윤곽선, 비율 × 둘레, True)로 꼭짓점을 셉니다. 도형 판에서 비율 0.01 은 원 12개, 팔각형 8개로 둘을 갈랐고, 0.02 에서는 원도 8개가 되어 팔각형과 섞였습니다.- 원형도는 4π×넓이 ÷ 둘레² 로, 원이 1, 정사각형이 π/4 ≈ 0.785, 정삼각형이 약 0.605 입니다. 그림 속에서는 칸의 계단 때문에 원이 0.872 로 팔각형(0.948)보다 작게 재어졌습니다.
- 종횡비(가로 ÷ 세로)와 채움 비율(넓이 ÷ 상자 넓이)은
boundingRect로 잽니다. 기운 물체는 채움 비율이 떨어지므로minAreaRect로 잽니다. 볼록 비율(넓이 ÷ 볼록 껍질 넓이)은 움푹한 모양에서 작아집니다. - 특징을 표로 모아 확실한 질문부터 if 로 차례로 물으면 모양 이름을 붙일 수 있습니다. 도형 판에서는 8개를 모두 맞혔지만 0.3배로 줄인 그림에서는 3개만 맞혀 작은 물체에 약했고, 표지판 프로젝트는 비율 0.01 에서 8개, 0.02 에서 6개를 맞혔습니다.
- 사각형 ROI 는
img[y:y+h, x:x+w]이고 원본을 보는 창입니다. 원본을 지키려면.copy()를, 여백을 붙일 때는max(0, ...),min(크기, ...)나np.clip으로 그림 안에 묶습니다. - 모양 ROI 는 마스크(
cv2.circle,cv2.fillPoly,cv2.drawContours두께 -1)와cv2.bitwise_and로 만듭니다. ROI 만 처리해 원본 쪽 슬라이싱에 대입하면 그 자리만 바뀝니다. 기하 변환으로 기운 물체를 바로 세우는 일은 14장에서 합니다.