Prerequisite : 윤곽선 길이 구하기, 바운딩 박스

최소 크기의 회전된 바운딩 박스

바운딩 박스를 회전시켜 구할 수 있다면, 더 작은 사각형으로 도형을 감쌀수 있다.

OpenCV에서는 회전된 바운딩 박스를 구하는데 minAreaRect() 함수를 제공한다.

Imgproc.minAreaRect(contour)

contour: 윤곽선 좌표
반환값: RotatedRect 타입의 회전된 사각형 정보

minAreaRect 함수를 사용하여 최소 크기의 회전된 바운딩 박스를 구하는 예제를 살펴보자.

예제코드:

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) {
    val contour2f = MatOfPoint2f(*contours[i].toArray())
    // 회전된 바운딩 박스 구하기
    val rotatedRect:RotatedRect = Imgproc.minAreaRect(contour2f)
    // Java용으로 배포된 OpenCV에서는 회전된 사각형을 그릴만한 적당한 함수가 없으므로,
    // 얻은 정보를 기반으로 실선을 이어붙여 사각형을 만든다.
    val points: Array<Point> = arrayOf(Point(),Point(),Point(),Point())
    rotatedRect.points(points)
    for (j in points.indices) {
        Imgproc.line(src, points[j], points[(j + 1) % 4], RED)
    }
}

후원하기

카테고리: OpenCV

0개의 댓글

답글 남기기

Avatar placeholder

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