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)
}
0개의 댓글