본문 바로가기
코딩/OpenCV

[C++ opencv] 컬러이미지 흑백으로 변환 , RGB to Grayscale

by DIYver 2020. 6. 17.

본문 목표

OpenCV에서 이미지를 연산처리할 때, 흑백 이미지로 처리하는 것이 좋다.

컬러 이미지를 흑백 이미지로 변환해주는 방법에 대해서 알아본다.

 

 

키워드 :  cvtColor( )

 

 

 

 

 

알아볼 함수 원형

- 이미지 색채널 변경 ( Converter Color )

#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

...

Mat color_img = imread("Lenna.png");
Mat grayscale_img;

cvtColor(color_img, grayscale_img, COLOR_BGR2GRAY);

...

 

cvtColor( input Arrayoutput Array, flag) : input Array를 입력받아 flag 에 대한 옵션으로 이미지 색채널을 변경하여 output Array에 저장한다.

 

 

원본 이미지를 cvtColor( ) 함수를 이용하여 색채널을 바꿀 수 있다.

 

보통 많이 바꾸는 색채널로는 Grayscale 또는 HSV 색채널 이다.

 

위의 코드는 그 중에서도 가장 많이 사용하는 Grayscale를 사용했다.

 

flag 에는 정말 많은 옵션이 담겨있다.

 

자세한 것은 visual studio 에서 확인 가능하다.

 

flag 에서 COLOR_BGR2GRAY 를 입력하기 귀찮다면 숫자 '6' 으로 입력해도 같은 결과가 나온다.

 

그리고 우리는 흔히 RGB 라고 읽지만, OpenCV 등에서는 BGR 순서로 색 정보를 다룬다.

 

나중에도 컬러 색 채널을 다룬다면 Blue, Green, Red 순서임을 기억하자.

 

 

 

 

 

코드 테스트 결과

- CODE

#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main(int ac, char** av) {

	Mat color_img = imread("Lenna.png");
	Mat grayscale_img;

	cvtColor(color_img, grayscale_img, COLOR_BGR2GRAY);
	
	imshow("color_img", color_img);
	imshow("grayscale_img", grayscale_img);
	waitKey(0);

	return 0;
}

 

- RESULT

color_img

 

cvtColor BGR2Grayscale img

컬러 이미지가 흑백으로 변한것을 확인할 수 있다.

 

위의 경우에는 저장되어 있는 사진을 imread( )로 불러오면서 흑백으로 불러오면 되는 경우이지만,

 

코딩을 하다보면 cvtColor( ) 함수를 정말 많이 이용하게 될 것이다.

 

 

 

여기서 의문이 하나 들 수 있는데,

imread( ) 함수를 이용할 때, 흑백으로 불러온 결과와 cvtColor( ) 함수를 이용한 결과가 과연 같을까? 하는 의심을 해볼 수 있다.

 

이에대한 답은 스스로 한번 찾아보시길 바란다. 개인 능력 향상의 지름길이 될 수 있을 것이다.

 

 

 

 

 

 

 

 

 

도움이 되었거나, 문제가 있는 경우 댓글로 알려주세요~!

감사의 댓글은 작성자에게 큰 힘이 됩니다 ^^

댓글