OpenCV 비전 실무12장 · Contour Detection 과 객체 분석20 / 21← 이전목차다음 →MetaContents

12장. Contour Detection 과 객체 분석

정리

찾기, 재기, 감싸고 세기의 세 칸으로 12장을 요약한 인포그래픽
  • 윤곽선은 흰 덩어리의 테두리를 따라 이은 점 목록입니다. 경계(10·11장)가 칸의 모음이라면 윤곽선은 목록 하나가 물체 하나라서 세고 잴 수 있습니다.
  • cv2.findContours(이진 그림, mode, method) 는 contours 와 hierarchy 두 값을 돌려줍니다. 입력은 흰 물체, 검은 바탕이고, 윤곽선 하나는 (점 수, 1, 2) 모양입니다. 담긴 차례는 위치 순서가 아니므로 보고할 때 다시 정렬합니다.
  • mode 는 바깥만(EXTERNAL), 모두(LIST), 모두와 부모 자식(TREE) 가운데 고릅니다. hierarchy 한 줄은 [다음, 이전, 첫 자식, 부모] 이고, 액자 그림에서 EXTERNAL 3개, LIST·TREE 6개였습니다.
  • method 의 SIMPLE 은 곧은 줄의 양 끝만 남겨 도형 판의 점을 1,291개에서 620개로 줄였고, 면적은 그대로였습니다.
  • 면적(contourArea)은 점이 칸 가운데를 지나므로 칸 수보다 조금 작습니다(80×50 네모가 3,871). 둘레는 arcLength(c, True), 무게중심은 m10 ÷ m00, m01 ÷ m00 으로 흰 칸 좌표의 평균입니다.
  • 곧은 상자, 회전 상자, 최소 외접원 가운데 기운 물체에는 회전 상자가 맞습니다. 30도 기운 네모의 곧은 상자 넓이는 회전 상자의 2.12배였습니다. 회전 상자의 꼭짓점은 cv2.boxPoints 로 구해 int32 로 바꿔 그립니다.
  • 잡티는 면적 기준으로 거릅니다. 작업대 사진의 윤곽선 51개가 면적 100 이상만 남기자 부품 12개가 되었고, connectedComponentsWithStats 도 같은 12개를 셌습니다. 면적은 흰 칸 수가 contourArea 보다 23~53 컸습니다. 프로젝트에서는 면적 기준 550, 1,300 으로 컨베이어 부품 21개의 크기를 모두 맞혔습니다.
← 이전 절12장 · 프로젝트 1 — 컨베이어 부품 개수와 크기 검사다음 절 →12장 · 확인문제와 해답