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