상세 컨텐츠

본문 제목

그레이 스케일(grayscale) 이미지 출력 하기 - OpenCV

영상처리/OpenCV

by cepiloth 2021. 2. 14. 23:29

본문

728x90
반응형

그레이스케일 영상이란?

 사진술, 컴퓨팅, 그리고 표색계에서, 회색조 또는 그레이스케일(grayscale, greyscale) 디지털 영상은 각 화소의 값이 빛의 양을 나타내는 하나의 샘플인 이미지를 가리키며, 광도의 정보만을 전달한다. 이러한 종류의 이미지는 흑백 또는 단색화로도 알려져 있으며 회색 음영으로 이루어져 있어서 가장 여린 광도의 "검정"부터 가장 센 광도의 "백색"에 이르기까지 다양하다. 

 회색조 이미지는 1비트 투톤의 흑백 이미지와는 구분되며 컴퓨터 이미징에서 볼 때 이미지는 검은색과 흰색의 두 색만을 가지고 있다(bilevel또는 이진 이미지라고도 불린다). 회색조 이미지는 그 사이의 많은 회색 음영을 가지고 있다.

 회색조 이미지는 진동수(또는 파장)의 특정한 가중 조합에 따라 각 픽셀에서 측정되는 빛의 세기의 결과이고 그런 경우에 한 주파수(실제로는 좁은 주파수 영역)만이 포착되었을 때 단색이 적합하다. 주파수는 이론적으로 전자기 스펙트럼의 어디에든 있을 수 있다(예를 들어, 적외선, 가시광선, 자외선, 등.).

출처 https://ko.wikipedia.org/wiki/%ED%9A%8C%EC%83%89%EC%A1%B0

 

회색조 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 사진술, 컴퓨팅, 그리고 표색계에서, 회색조[1] 또는 그레이스케일(grayscale, greyscale) 디지털 영상은 각 화소의 값이 빛의 양을 나타내는 하나의 샘플인 이미지를

ko.wikipedia.org

 

그레이 스케일 변환 공식

그레이 스케일 변환 공식은 다양하다. 그러는 이유는 영상 전처리 단계에서 사람이 인지 할 수 있는 색상 대역폭을 기준으로 처리하기도 하고 특수 한 경우에 사용하는 공식이 다르다.

Gray = (Red + Green + Blue) / 3
Gray = (Red * 0.3 + Green * 0.59 + Blue * 0.11)
Gray = (Red * 0.2126 + Green * 0.7152 + Blue * 0.0722)
Gray = (Red * 0.299 + Green * 0.587 + Blue * 0.114)
Gray = ( Max(Red, Green, Blue) + Min(Red, Green, Blue) ) / 2

 

OpenCV 에서 그레이 스케일 영상 코드로 작성하기

cvtColor 함수에 3번째 인자에 COLOR_BGR2GRAY FLAG 설정하면 간단하게 작성 할 수 있다. 아래는 전체 소스 코드이다.

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>

#include <iostream>
#include <string>

using namespace std;
using namespace cv;

/*
* @brief - grayscale 영상으로 변경하는 메소드 
*/ 
void showGrayScaleImage(Mat img) {

    Mat gray;
    cvtColor(img, gray, COLOR_BGR2GRAY);
    imshow("Gray", gray);
}

int main() {

    Mat img = imread("image.png", IMREAD_COLOR);
    
    if(img.empty()) {
        cout << "이미지가 없거나, 유효한 파일 형식이 아닙니다." << endl;
        return -1;
    }

    imshow("원본 이미지", img);
    
    showGrayScaleImage(img);

    waitKey(0);
    
    return 0;
}

 

OpenCV 를 활용하면 간단하게 처리할 수 있으며
컬러영상을 그레이 스케일 영상으로 변환 할 수 있다.
아래는 위 소스코드의 출력 결과 이다.

OpenCV 로 만든 그레이스케일 영상

 

 

728x90
반응형

관련글 더보기

댓글 영역