OpenCV에서 제공하는 함수를 통해 윤곽선이 감싸는 영역의 면적을 구하는 방법을 알아보자.

윤곽선을 감싸는 면적 구하기

Imgproc.contourArea(contour)

contour : 윤곽선 정보(좌표)
oriented(optional) : true면 윤곽선 진행 방향에 따라 부호 있는 면적을 반환. 기본값은 false
반환값 : 윤곽선으로 구성된 영역의 면적

위 함수를 이용하여 이미지 내에 포함된 도형들의 면적(픽셀갯수)을 구하는 예제를 만들어보자.

예제 코드:

val contours = ArrayList<MatOfPoint>()
val hierarchy = Mat()

Imgproc.findContours(
    binary,
    contours,
    hierarchy,
    Imgproc.RETR_TREE,
    Imgproc.CHAIN_APPROX_SIMPLE
)

for (i in 0 until contours.size) {
    val contour = contours[i] // 윤곽선 좌표
    val contourArea = Imgproc.contourArea(contour) // 면적 구하기
    val moments = Imgproc.moments(contour) // 중심점을 구하기 위한 모먼트
    val centerX = moments.m10 / moments.m00 - 20
    val centerY = moments.m01 / moments.m00 - 5
    val center = Point(centerX, centerY)

    // 도형위에 윤곽선 구하기
    Imgproc.drawContours(src, contours, i, RED) 

    // 도형위에 면적 출력하기
    Imgproc.putText(src, "$contourArea",center,Imgproc.FONT_HERSHEY_SIMPLEX, 0.5, color)
}

후원하기

카테고리: OpenCV

0개의 댓글

답글 남기기

Avatar placeholder

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.