OpenCV에서 볼록 다각형(Concave Polygon) 그리기
모든 내각이 180도 미만인 다각형을 볼록 다각형(Convex Polygon)이라고 합니다. Java OpenCV 라이브러리의 org.opencv.imgproc 패키지에는 Imgproc라는 클래스가 포함되어 있으며, 다각형을 그리려면 이 클래스의 fillConvexPoly() 메서드를 호출하면 됩니다.
이 메서드는 다음과 같은 3개의 매개변수를 받습니다.
- 다각형을 그릴 대상 이미지를 나타내는 Mat 객체
- 다각형의 꼭짓점 좌표들을 담고 있는 MatOfPoint 객체
- 다각형의 색상을 나타내는 Scalar 객체
예제 코드
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class DrawingConvexPolygon {
public static void main(String args[]) {
// OpenCV 코어 네이티브 라이브러리 로드
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// 소스 이미지를 Mat 객체로 읽어오기
Mat src = Imgcodecs.imread("D:\\images\\blank.jpg");
// 다각형을 구성할 꼭짓점 좌표 정의
MatOfPoint points = new MatOfPoint(
new Point(108, 71), new Point(232, 52),
new Point(321, 161), new Point(269, 250),
new Point(126, 232), new Point(108, 71)
);
// 다각형의 색상 설정
Scalar color = new Scalar(64, 64, 64);
// 볼록 다각형 그리기
Imgproc.fillConvexPoly(src, points, color);
// 결과 이미지 저장 및 화면에 표시
Imgcodecs.imwrite("polygon_output.jpg", src);
HighGui.imshow("다각형 그리기", src);
HighGui.waitKey();
}
}실행 결과
위 프로그램을 실행하면 지정한 좌표를 꼭짓점으로 하는 회색 볼록 다각형이 이미지 위에 채워진 형태로 그려진 창이 표시됩니다.

핵심 포인트 정리
fillConvexPoly() 메서드는 이름 그대로 볼록 다각형만을 그릴 수 있습니다. 오목한 형태의 다각형을 그려야 한다면 polylines() 또는 fillPoly() 메서드를 사용하는 것이 좋습니다. 또한 꼭짓점 좌표는 시계 방향 또는 반시계 방향 순서대로 나열해야 올바른 형태의 다각형이 생성됩니다.