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

Java OpenCV 라이브러리로 이미지 색상 공간을 변경하는 방법

색상 공간(Color Space)은 이미지 속 색상을 표현하는 체계입니다. OpenCV에서는 다양한 색상 공간을 지원하며, 대표적인 것들은 다음과 같습니다.

OpenCV의 주요 색상 공간

  • BGR — RGB는 가장 널리 사용되는 색상 공간으로, 각 픽셀은 빨강(Red), 파랑(Blue), 초록(Green) 세 가지 색상 강도 값으로 구성됩니다. OpenCV의 기본 색상 공간이며, 채널 순서가 BGR로 저장되는 것이 특징입니다.
  • HSV — HSV 색상 공간에서는 색조(Hue), 채도(Saturation), 명도(Value/Brightness)를 조절하여 다양한 색상을 표현합니다.
  • CMY(K) — 감산 혼합 방식의 색상 공간으로, 흰색에서 시안(Cyan), 마젠타(Magenta), 옐로(Yellow) 값을 차감하여 색상을 만들어냅니다. 인쇄 분야에서 주로 사용됩니다.
  • Y'UV — 하나의 휘도(Luma, Y') 성분과 두 개의 색차(Chrominance, UV) 성분으로 색상 공간을 정의합니다. 아날로그 컬러 비디오 표준에서 널리 활용됩니다.

cvtColor() 메서드로 색상 공간 변환하기

이미지의 색상 공간을 변환하려면 org.opencv.imgproc.Imgproc 클래스가 제공하는 cvtColor() 메서드를 사용하면 됩니다. 이 메서드는 원본 이미지(Mat), 결과를 저장할 대상 이미지(Mat), 그리고 목표 색상 공간을 나타내는 변환 코드를 매개변수로 받습니다.

예를 들어 BGR에서 HSV로 변환하려면 COLOR_BGR2HSV 코드를, BGR에서 YUV로 변환하려면 COLOR_BGR2YUV 코드를 전달하면 됩니다. 그레이스케일 변환에는 COLOR_BGR2GRAY 코드를 사용합니다.

예제 코드

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class ChangingColorSpaces {
   public static void main(String args[]) throws Exception {
      // OpenCV 핵심 라이브러리 로드
      System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

      // 이미지 읽기
      Mat src = Imgcodecs.imread("D:\\images\\elephant.jpg");

      // 빈 대상 행렬 생성
      Mat dst = new Mat();

      // BGR → 그레이스케일 변환
      Imgproc.cvtColor(src, dst, Imgproc.COLOR_BGR2GRAY);
      HighGui.imshow("BGR to Gray", dst);
      dst = new Mat();

      // BGR → HSV 변환
      Imgproc.cvtColor(src, dst, Imgproc.COLOR_BGR2HSV);
      HighGui.imshow("BGR to HSV", dst);
      dst = new Mat();

      // BGR → YUV 변환
      Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGB2YUV);
      HighGui.imshow("BGR to YUV", dst);

      HighGui.waitKey();
   }
}

입력 이미지

Java OpenCV 라이브러리로 이미지 색상 공간을 변경하는 방법

실행 결과

위 프로그램을 실행하면 각각의 색상 공간으로 변환된 이미지 창이 순서대로 나타납니다.

BGR to Gray

Java OpenCV 라이브러리로 이미지 색상 공간을 변경하는 방법

BGR to HSV

Java OpenCV 라이브러리로 이미지 색상 공간을 변경하는 방법

BGR to YUV

Java OpenCV 라이브러리로 이미지 색상 공간을 변경하는 방법