Java용 OpenCV 라이브러리의 org.opencv.imgproc 패키지에는 Imgproc 클래스가 포함되어 있습니다. 이 클래스는 resize(), filter2D() 등 입력 이미지를 처리하는 다양한 메서드를 제공하며, 이 외에도 이미지 위에 기하학적 도형을 그릴 수 있는 여러 메서드들을 함께 제공합니다.
polylines() 메서드란?
이미지에 폴리라인(다각형 선)을 그리려면 Imgproc 클래스의 polylines() 메서드를 호출하면 됩니다. 이 메서드는 다음과 같은 매개변수를 받습니다.
- 폴리라인을 그릴 대상 이미지를 나타내는 Mat 객체
- MatOfPoint 타입 객체들을 담고 있는 List 객체 (꼭짓점 좌표 목록)
- 폴리라인을 닫을지(시작점과 끝점을 연결할지) 여부를 지정하는 boolean 값
- 폴리라인의 색상을 나타내는 Scalar 객체
- 선의 두께를 나타내는 정수값 (기본값: 1)
예제 코드
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 DrawingPolyines {
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(226, 232), new Point(332, 52),
new Point(363, 250)));
// 폴리라인 닫힘 여부 설정
boolean isClosed = true;
// 색상 및 두께 지정
Scalar color = new Scalar(64, 64, 64);
int thickness = 10;
// 폴리라인 그리기
Imgproc.polylines(src, list, isClosed, color, thickness);
// 결과 이미지 저장 및 화면에 표시
Imgcodecs.imwrite("arrowed_line.jpg", src);
HighGui.imshow("Drawing a polylines", src);
HighGui.waitKey();
}
}코드 설명
위 예제에서는 먼저 System.loadLibrary()를 통해 OpenCV 네이티브 라이브러리를 로드한 후, Imgcodecs.imread()로 빈 이미지 파일을 읽어옵니다. 그다음 Point 객체 5개로 구성된 MatOfPoint를 리스트에 추가하여 폴리라인의 꼭짓점 좌표를 정의합니다.
isClosed 값을 true로 설정했기 때문에 시작점과 끝점이 연결되어 닫힌 다각형 형태로 그려집니다. 색상은 RGB 값 (64, 64, 64)의 진회색으로 지정하고, 선 두께는 10픽셀로 설정했습니다.
실행 결과
프로그램을 실행하면 지정한 좌표를 따라 회색 폴리라인이 그려진 이미지 창이 화면에 표시되며, 동시에 arrowed_line.jpg 파일로 저장됩니다.