이미지 색공간 변환 및 각 채널 visualization(YUV, HSV, Lab로 변환) - OpenCV(C++)
Updated:
OpenCV를 이용해 이미지를 받은 후 색공간 변환 및 각 채널 visualization
Visual Studio 2017을 사용하였습니다.
컬러 image를 입력받아서 다른 색공간 으로 변환 후 각 채널을 보는 것을 포스팅하겠습니다.
각 채널에 대해서는 각각의 채널에 대한 0~255 값을 가지므로 흑백이 출력됩니다.
cvtColor 함수를 통해 색공간을 변환한 후 split으로 각 채널을 받는 쉬운 코드입니다.
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat scenery, YUV_scenery, HSV_scenery, Lab_scenery; // 원본과 변환을 위한 Mat 객체 선언
// 원본, YUV변환, HSV변환, Lab변환
Mat YUV[3], HSV[3], Lab[3]; // split을 위한 Mat 객체 선언
scenery = imread("scenery.jpg");
if (scenery.empty())
{
cerr << "이미지 파일을 읽을 수 없음\n";
return -1;
}
imshow("Input_image", scenery);
int input_key = waitKey(0);
cout << "변환할 채널을 선택하시오(숫자)\n1 : YUV\n2 : HSV\n3 : Lab\n";
int num = 0;
cin >> num;
if (num == 1) // YUV 선택
{
cvtColor(scenery, YUV_scenery, COLOR_RGB2YUV);
split(YUV_scenery, YUV);
imshow("YUV-Y", YUV[0]);
imshow("YUV-U", YUV[1]);
imshow("YUV-V", YUV[2]);
}
else if (num == 2) // HSV 선택
{
cvtColor(scenery, HSV_scenery, COLOR_RGB2HSV);
split(HSV_scenery, HSV);
imshow("HSV-H", HSV[0]);
imshow("HSV-S", HSV[1]);
imshow("HSV-V", HSV[2]);
}
else if (num == 3) // Lab 선택
{
cvtColor(scenery, Lab_scenery, COLOR_RGB2Lab);
split(Lab_scenery, Lab);
imshow("Lab-L", Lab[0]);
imshow("Lab-a", Lab[1]);
imshow("Lab-b", Lab[2]);
}
int output_key = waitKey(0);
if (input_key == 27)
return 0;
if (output_key == 27)
return 0;
return 0;
}
Leave a comment