본문 목표
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 Array, output 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
컬러 이미지가 흑백으로 변한것을 확인할 수 있다.
위의 경우에는 저장되어 있는 사진을 imread( )로 불러오면서 흑백으로 불러오면 되는 경우이지만,
코딩을 하다보면 cvtColor( ) 함수를 정말 많이 이용하게 될 것이다.
여기서 의문이 하나 들 수 있는데,
imread( ) 함수를 이용할 때, 흑백으로 불러온 결과와 cvtColor( ) 함수를 이용한 결과가 과연 같을까? 하는 의심을 해볼 수 있다.
이에대한 답은 스스로 한번 찾아보시길 바란다. 개인 능력 향상의 지름길이 될 수 있을 것이다.
도움이 되었거나, 문제가 있는 경우 댓글로 알려주세요~!
감사의 댓글은 작성자에게 큰 힘이 됩니다 ^^
'코딩 > OpenCV' 카테고리의 다른 글
[C++ opencv] 동영상 불러오기 VideoCapture() (1) | 2020.06.24 |
---|---|
[C++ opencv] 카메라, 웹캠 영상 입력받기 VideoCapture() (0) | 2020.06.24 |
[C++ opencv] Grayscale 변환에 대한 고찰 1 (4) | 2020.06.17 |
[C++ opencv] 이미지 불러오고 보여주는 방법, imread() imshow() (2) | 2020.06.16 |
가장 쉽고 정확하게 C++ OpenCV 설치하기 (모든버전 공통) (48) | 2020.06.15 |
댓글