색상 공간 변화
OpenCvSharp4에서 색상 공간 변화는 이미지의 색상 표현 방식을 바꾸는 것을 의미한다.
사람의 눈은 빨강, 초록, 파랑 세 가지 색깔을 조합하여 다양한 색상을 인지하는데, 이를 RGB 색상 공간이라고 한다. 하지만 컴퓨터 비전(Computer Vision)에서는 RGB 외에도 HSV, HSL, YCrCb 등 다양한 색상 공간을 사용한다. 각 색상 공간은 색상을 표현하는 방식이 다르기 때문에 특정 작업에 더 적합한 경우가 있다.
색상 공간 변화를 사용하는 이유
색상 공간 변화 예시
using OpenCvSharp;
// 이미지 파일 로드
Mat image = Cv2.ImRead("image.jpg");
// HSV 색상 공간으로 변환
Mat hsvImage = new Mat();
Cv2.CvtColor(image, hsvImage, ColorConversionCodes.BGR2HSV);
// 빨간색 영역 추출
Mat redMask = new Mat();
Cv2.InRange(hsvImage, new Scalar(0, 100, 100), new Scalar(10, 255, 255), redMask);
// 결과 이미지 출력
Cv2.ImShow("Original Image", image);
Cv2.ImShow("HSV Image", hsvImage);
Cv2.ImShow("Red Mask", redMask);
Cv2.WaitKey(0); // 키 입력을 무한정 기다린다. 아무 키나 누르면 다음 코드가 실행된다.
// 이미지 해제
image.Dispose();
hsvImage.Dispose();
redMask.Dispose();
사용 방법
OpenCVSharp에서 색상 공간 변화는 Cv2.CvtColor() 메서드를 사용하여 수행한다.
Cv2.CvtColor(입력 이미지, 출력 이미지, 색상 변환 코드);
입력 이미지: 색상 공간을 변환할 이미지이다.출력 이미지: 변환된 이미지를 저장할 Mat 객체이다.색상 변환 코드: ColorConversionCodes 열거형에 정의된 색상 공간 변환 코드이다. 예를 들어, ColorConversionCodes.BGR2HSV는 BGR 색상 공간을 HSV 색상 공간으로 변환하는 코드이다.아래와 같은 방법으로 색상 공간 변환 가능하다.
using System;
using OpenCvSharp;
namespace Project
{
class Program
{
static void Main(string[] args)
{
Mat src = Cv2.ImRead("desert.jpg");
Mat dst = new Mat(src.Size(), MatType.CV_8UC1);
Cv2.CvtColor(src, dst, ColorConversionCodes.BGR2GRAY);
Cv2.ImShow("dst", dst);
Cv2.WaitKey(0);
Cv2.DestroyAllWindows();
}
}
}
이 C# 코드는 OpenCVSharp 라이브러리를 사용하여 이미지 파일을 불러와 흑백 이미지로 변환하고, 변환된 이미지를 화면에 표시하는 프로그램이다.
MainApp 클래스의 Main 메서드에서 Mat src = Cv2.ImRead("desert.jpg");는 "desert.jpg"라는 이미지 파일을 src라는 Mat 객체에 로드한다. Mat 객체는 OpenCVSharp에서 이미지를 표현하는 데 사용되는 클래스이다.
Mat dst = new Mat(src.Size(), MatType.CV_8UC1);는 src 이미지와 같은 크기의 흑백 이미지를 저장할 dst라는 Mat 객체를 생성한다. MatType.CV_8UC1은 8비트 unsigned char 타입의 1채널(흑백) 이미지를 의미한다.
Cv2.CvtColor(src, dst, ColorConversionCodes.BGR2GRAY);는 src 이미지를 흑백 이미지로 변환하여 dst에 저장한다. ColorConversionCodes.BGR2GRAY는 BGR 색상 공간을 GRAY 색상 공간으로 변환하는 코드이다.
이처럼 BGR 색상 공간을 그레이스케일로 변환도 가능한데, 그레이스케일(GRAY) 변환은 다중 채널에서 단일 채너로 변환하기 때문에 dst의 채널 수는 1이어야 한다.
Cv2.ImShow("dst", dst);는 dst 이미지를 "dst"라는 이름의 창에 표시한다.
Cv2.WaitKey(0);는 키 입력을 무한정 기다린다. 아무 키나 누르면 다음 코드가 실행된다.
Cv2.DestroyAllWindows();는 모든 OpenCV 창을 닫는다.