OpenCV에서 이미지의 색상 공간을 변환하려면 Imgproc 클래스가 제공하는 cvtColor() 메서드를 사용하면 됩니다. 이 메서드는 이미지를 한 색상 모델에서 다른 색상 모델로 간단하게 바꿔 주며, 다음과 같은 세 가지 매개변수를 받습니다.
src – 변환할 원본 이미지를 담고 있는 Mat(행렬) 객체입니다.
dst – 변환 결과를 저장할 대상 Mat 객체입니다.
code – 어떤 색상 공간으로 변환할지 지정하는 정수 값(색상 변환 코드)입니다.
주요 색상 변환 코드
세 번째 매개변수에 전달하는 코드에 따라 변환 결과가 달라집니다. 자주 사용되는 대표적인 코드는 다음과 같습니다.
Imgproc.COLOR_RGB2BGR – RGB 채널 순서를 BGR로 재배열합니다.
Imgproc.COLOR_BGR2RGB – BGR 채널 순서를 RGB로 재배열합니다.
Imgproc.COLOR_RGB2GRAY – 컬러 이미지를 흑백(그레이스케일) 이미지로 변환합니다.
예를 들어 컬러 이미지를 BGR 형식으로 변환하려면 Imgproc.COLOR_RGB2BGR을, 그레이스케일로 변환하려면 Imgproc.COLOR_RGB2GRAY를 세 번째 매개변수로 전달하면 됩니다.
예제 코드
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class ColorToGrayscale {
public static void main(String args[]) throws Exception {
// OpenCV 핵심 네이티브 라이브러리 로드
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// 원본 이미지 읽기
Mat src = Imgcodecs.imread("spiderman.jpg");
// 변환 결과를 담을 빈 행렬 생성
Mat dst = new Mat();
// 이미지를 그레이스케일로 변환
Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGB2GRAY);
// Imgcodecs 인스턴스 생성 후 이미지 저장
Imgcodecs imageCodecs = new Imgcodecs();
imageCodecs.imwrite("rgb2bgr.jpg", dst);
System.out.println("Image Saved");
}
}코드 설명
위 예제는 다음 순서로 동작합니다.
라이브러리 로드 – System.loadLibrary()로 OpenCV 네이티브 라이브러리를 먼저 불러옵니다. 이 과정이 없으면 실행 시 오류가 발생합니다.
이미지 읽기 – Imgcodecs.imread() 메서드로 디스크에 있는 이미지 파일을 Mat 객체로 읽어 들입니다.
색상 변환 – Imgproc.cvtColor() 메서드에 원본(src), 대상(dst), 변환 코드를 전달해 색상을 변환합니다.
결과 저장 – Imgcodecs.imwrite() 메서드로 변환된 이미지를 새 파일로 저장합니다.
입력 이미지

출력 이미지

코드를 실행하면 콘솔에 "Image Saved"가 출력되며, 프로젝트 폴더에 변환된 이미지 파일이 생성됩니다. 이처럼 cvtColor() 메서드 하나만으로 다양한 색상 공간 간의 변환을 손쉽게 처리할 수 있습니다.