Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java로 OpenCV에서 채워진 원(Filled Circle) 그리는 방법

Java OpenCV 라이브러리의 org.opencv.imgproc 패키지에는 Imgproc이라는 클래스가 포함되어 있습니다. 이 클래스는 circle() 메서드를 제공하며, 이 메서드를 활용하면 이미지 위에 원을 간단하게 그릴 수 있습니다.

Imgproc.circle() 메서드의 매개변수

circle() 메서드는 다음과 같은 매개변수를 받습니다.

  • Mat 객체: 원을 그릴 대상 이미지를 나타냅니다.
  • Point 객체: 원의 중심 좌표(x, y)를 나타냅니다.
  • 정수형 변수: 원의 반지름(radius)을 나타냅니다.
  • Scalar 객체: 원의 색상을 BGR 형식으로 지정합니다.
  • 정수값: 선 두께(thickness)를 나타내며, 기본값은 1입니다.

여기서 선 타입(lineType) 자리에 Imgproc.FILLED(내부적으로 -1 값)를 전달하면, 외곽선만 그려지는 것이 아니라 내부가 모두 채워진 원이 그려집니다.

예제 코드

import org.opencv.core.Core;
import org.opencv.core.Mat;
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 DrawingFilledCircle {
    public static void main(String args[]) {
        // OpenCV 네이티브 라이브러리 로드
        System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

        // 소스 이미지를 Mat 객체로 읽어오기
        Mat src = Imgcodecs.imread("D:\\images\\blank.jpg");

        // 채워진 원 그리기
        Point center = new Point(300, 200);   // 원의 중심
        int radius = 100;                     // 반지름
        Scalar color = new Scalar(64, 64, 64); // BGR 색상 (회색)
        int thickness = Imgproc.FILLED;       // 채우기 옵션

        Imgproc.circle(src, center, radius, color, thickness);

        // 결과 이미지 저장 및 화면에 표시
        Imgcodecs.imwrite("filled_circle.jpg", src);
        HighGui.imshow("Drawing a filled circle", src);
        HighGui.waitKey();
    }
}

위 코드에서는 크기가 충분한 빈 이미지(blank.jpg)를 불러온 뒤, 좌표 (300, 200)을 중심으로 하고 반지름이 100픽셀인 회색(BGR 64, 64, 64) 채워진 원을 그립니다. 참고로 원본 예제에는 중복된 System.loadLibrary() 호출이 있었는데, 네이티브 라이브러리는 한 번만 로드하면 되므로 위 코드에서는 하나로 정리했습니다.

실행 결과

프로그램을 실행하면 이미지 위에 그려진 채워진 원이 담긴 다음과 같은 창이 나타납니다.

Java로 OpenCV에서 채워진 원(Filled Circle) 그리는 방법

추가 팁

테두리만 있는 원을 그리고 싶다면 thickness 값을 양의 정수(예: 1, 2, 3...)로 지정하면 되고, 반대로 완전히 채운 원이 필요하다면 항상 Imgproc.FILLED 또는 -1을 사용하면 됩니다. 또한 색상은 OpenCV 기본 채널 순서인 RGB가 아닌 BGR 순서로 지정해야 하므로, 빨간색 원을 원한다면 new Scalar(0, 0, 255)처럼 입력해야 한다는 점도 유의하세요.