OpenCV에서는 cvtColor() 메서드의 세 번째 매개변수에 Imgproc.COLOR_RGB2HLS 플래그를 전달하는 것만으로 RGB(컬러) 이미지를 HLS 색 공간으로 손쉽게 변환할 수 있습니다.
HLS 색 공간이란?
HLS는 색조(Hue), 명도(Lightness), 채도(Saturation)를 의미합니다. RGB가 빛의 삼원색 조합으로 색을 표현하는 반면, HLS는 사람이 색을 인식하는 방식에 가깝게 색조·밝기·채도의 세 요소로 색을 분리하여 표현합니다. 이러한 특성 때문에 특정 색상 영역을 추출하거나 밝기와 색상을 독립적으로 조정해야 하는 이미지 처리 작업에서 HLS 변환이 자주 활용됩니다.
예제 코드
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class RGB2HLS {
public static void main(String args[]) throws Exception {
// OpenCV 네이티브 라이브러리 로드
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// 원본 이미지 읽기
Mat src = Imgcodecs.imread("D:\\images\\car3.jpg");
// 결과를 저장할 Mat 객체 생성
Mat dst = new Mat();
// RGB → HLS 색 공간 변환
Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGB2HLS);
// 변환된 이미지 저장
Imgcodecs imageCodecs = new Imgcodecs();
imageCodecs.imwrite("D:\\images\\hslImage.jpg", dst);
System.out.println("Image Saved");
}
}코드 설명
1. 네이티브 라이브러리 로드: System.loadLibrary(Core.NATIVE_LIBRARY_NAME)을 호출하여 OpenCV의 네이티브 라이브러리를 먼저 로드해야 합니다. 이 과정이 없으면 OpenCV 함수 호출 시 오류가 발생합니다.
2. 이미지 읽기: Imgcodecs.imread() 메서드로 지정된 경로의 이미지 파일을 Mat 객체로 불러옵니다.
3. 색 공간 변환: Imgproc.cvtColor() 메서드에 원본 이미지(src), 결과를 담을 객체(dst), 그리고 변환 코드인 Imgproc.COLOR_RGB2HLS를 순서대로 전달합니다.
4. 결과 저장: imwrite() 메서드를 사용하여 변환된 HLS 이미지를 지정한 경로에 저장합니다.
입력 이미지

출력 이미지

실행 결과를 보면 원본 컬러 이미지가 HLS 색 공간으로 변환되어 각 채널이 색조(H), 명도(L), 채도(S) 값으로 재구성된 것을 확인할 수 있습니다. 반대로 HLS 이미지를 다시 RGB로 변환하려면 Imgproc.COLOR_HLS2RGB 플래그를 사용하면 됩니다.