fillPoly() 메서드란?
Java용 OpenCV 라이브러리의 org.opencv.imgproc 패키지에는 Imgproc 클래스가 포함되어 있습니다. 이미지 위에 채워진 다각형(filled polygon)을 그리려면 이 클래스가 제공하는 fillPoly() 메서드를 호출하면 됩니다.
fillPoly() 메서드는 다음과 같은 매개변수를 받습니다.
- Mat 객체 − 다각형이 그려질 대상 이미지를 나타냅니다.
- List<MatOfPoint> 객체 − 다각형의 꼭짓점 좌표를 담고 있는 MatOfPoint 타입 객체들의 목록입니다.
- Scalar 객체 − 다각형 내부를 채울 색상(BGR 값)을 나타냅니다.
- 정수(int) − 선의 종류(line type)를 나타냅니다. 예:
Imgproc.LINE_8
예제 코드
import java.util.ArrayList;
import java.util.List;
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 DrawingFilledPolygon {
public static void main(String args[]) {
// OpenCV 네이티브 라이브러리 로드
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// 원본 이미지를 Mat 객체로 읽어 들임
Mat src = Imgcodecs.imread("D:\\images\\blank.jpg");
// 다각형의 꼭짓점 좌표 정의
List<MatOfPoint> list = new ArrayList<MatOfPoint>();
list.add(new MatOfPoint(
new Point(208, 71), new Point(421, 161),
new Point(332, 52), new Point(369, 250),
new Point(421, 161), new Point(226, 232),
new Point(369, 250), new Point(208, 71),
new Point(226, 232), new Point(332, 52)));
// 색상과 선 종류 지정
Scalar color = new Scalar(64, 64, 64);
int lineType = Imgproc.LINE_8;
// 채워진 다각형 그리기
Imgproc.fillPoly(src, list, color, lineType);
// 이미지 저장 및 화면에 표시
Imgcodecs.imwrite("filled_polygon.jpg", src);
HighGui.imshow("Drawing a polygon", src);
HighGui.waitKey();
}
}
코드 동작 순서
System.loadLibrary()를 호출하여 OpenCV 네이티브 라이브러리를 로드합니다.Imgcodecs.imread()로 원본 이미지를Mat객체에 읽어 들입니다.- 다각형의 각 꼭짓점을
Point객체로 정의하고, 이를MatOfPoint로 묶어 리스트에 추가합니다. Scalar객체로 색상을 지정하고 선 종류를 설정한 뒤,Imgproc.fillPoly()를 호출하여 다각형을 채웁니다.Imgcodecs.imwrite()로 결과 이미지를 저장하고,HighGui.imshow()로 화면에 출력합니다.
실행 결과
위 프로그램을 실행하면 다음과 같이 이미지 위에 채워진 다각형이 그려진 결과 창이 나타납니다.
