관심쟁이 영호

[#13] OpenCV(With. c++)ㅣ컬러공간 변환! ㅣRGB, CMY 본문

학교공부/OpenCV

[#13] OpenCV(With. c++)ㅣ컬러공간 변환! ㅣRGB, CMY

관심쟁이 영호 2020. 11. 16. 01:30
반응형

안녕하세요!

관심쟁이 영호입니다.

 

오늘은 컬러공간을 변경해볼건데요!

살펴보시죠!


 

컬러공간?

컬러공간은 다른 말로 컬러 표현 시스템, 컬러모델로도 표현이 된다고 합니다!

이러한 컬러공간은 기기나 프로그램에 따라 다르게 표현이 됩니다!

그래서 수시로 컬러공간을 변경해주어야 하는 상황이 올 수 있어요.

 

컬러공간은 대표적으로 R(ed) G(reen) B(lue)가 있어요!

그리고 CMY, HSI, LAB, YUV 등등이 있습니다.

 

오늘은 RGB를 다른 공간으로 변경해볼 예정이에요.

 

CMY

CMY는 CYAN, MAGENTA, YELLOW로 나뉩니다.

 

그리고 HSI도 있는데요!

이것은 명도와 채도를 섞은것이라고 보시면 됩니다.

 

먼저 BGR을 CMY로 고쳐볼게요!

 

C = 255 -R R = 255- C
M = 255- G G = 255 - M
Y = 255 - R B = 255 -Y

여기에 더해서 CMYK라는 것이 있어요!

CMY만으로 색상을 표현하는데 문제가 있어서

K(검정)을 추가한것이죠!

 

코드로 살펴볼게요!

BGR -> CMYK

#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;



void main() {

	Mat BGR_img = imread("../image/sample_image2.jpg", IMREAD_COLOR);
	CV_Assert(BGR_img.data);

	
	Scalar white(255, 255, 255);
	Mat CMY_img = white - BGR_img;
	Mat CMY_arr[3];
	split(CMY_img, CMY_arr);

	Mat black;									//검은색 채널
	min(CMY_arr[0], CMY_arr[1], black);			// 원소 간 최솟값 저장
	min(black, CMY_arr[2], black);
	
	CMY_arr[0] = CMY_arr[0] - black;
	CMY_arr[1] = CMY_arr[1] - black;
	CMY_arr[2] = CMY_arr[2] - black;
	
	imshow("원본 이미지", BGR_img);
	imshow("black", black);
	imshow("yellow", CMY_arr[0]);
	imshow("magenta", CMY_arr[1]);
	imshow("Cyan", CMY_arr[2]);

	waitKey(0);
}

이렇게 하면 결과값은!

이렇게 나오게 되네요!

 

여기서 black값은

cyan, magenta, yellow에 있는 최속값을 저장하게 됩니다!

 

위쪽에서 설명한 것 처럼

255값에 각 값을 빼주면 매칭되는 색의 값이 되는겁니다!

 

아주 쉽죠!?

 

 

 

300x250
Comments