Prerequisite : 윤곽선 길이 구하기

바운딩 써클

바운딩 써클이란 윤곽선을 외접하여 둘러싸는 가장 작은 원을 의미한다. OpenCV에서는 minEnclosingCircle이라는 함수를 통해 바운딩 써클를 구할 수 있다.

Imgproc.minEnclosingCircle(contour, center, radius)

contour: 윤곽선 좌표
center: 함수 호출 후 참조 가능한 도형의 중심점
radius: 함수 호출 후 참조 가능한 바운딩 서클 반지름

minEnclosingCircle 함수를 이용하여 이미지 내 도형들을 감싸는 예제를 살펴보자.

예제코드:

val contours = ArrayList<MatOfPoint>()
val hierarchy = Mat()
// 윤곽선 검출
Imgproc.findContours(
    binarySrc,
    contours,
    hierarchy,
    Imgproc.RETR_TREE,
    Imgproc.CHAIN_APPROX_SIMPLE
)
for (i in 0 until contours.size) {
    // minEnclosingCircle 호출 후 중심점과 반지름을 얻게 된다.
    val center = Point()
    val radius = floatArrayOf(0f)
    // minEnclosingCircle은 MatOfPoint2f 타입만 취하므로 이에 맞게 변환한다.
    val contour2f = MatOfPoint2f(*contours[i].toArray())
    // 윤곽선을 감싸는 원 정보 구하기
    Imgproc.minEnclosingCircle(contour2f, center, radius)
    // 얻은 정보를 토대로 빨간 원을 그린다.
    Imgproc.circle(src, center, radius[0].toInt(), RED)
}



donaricano-btn

카테고리: OpenCV

0개의 댓글

답글 남기기

Avatar placeholder

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