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