색상 공간(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();
}
}입력 이미지

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

BGR to HSV —

BGR to YUV —
