Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++와 OpenCV를 활용한 이미지 밝기 줄이기 방법

OpenCV에서 이미지의 밝기를 줄이는 방법은 밝기를 높이는 방법과 매우 유사합니다. 두 방법의 유일한 차이점은 연산 방향에 있습니다. 밝기를 높일 때는 이미지에 Scalar(B, G, R) 값을 더하지만, 밝기를 줄일 때는 이미지에서 스칼라 값을 빼주면 됩니다.

즉, 각 픽셀의 B(파랑), G(초록), R(빨강) 채널 값에서 동일한 크기의 값을 차감하면 전체적으로 어두운 이미지가 생성됩니다.

핵심 원리

OpenCV에서 이미지는 Mat 객체(행렬)로 표현되며, 행렬과 스칼라 값 사이의 산술 연산을 지원합니다. 따라서 original - Scalar(80, 80, 80)처럼 간단한 뺄셈 연산만으로 모든 픽셀에서 일정한 값을 제거하여 밝기를 낮출 수 있습니다. 이때 스칼라 값이 클수록 결과 이미지는 더 어둡게 나타납니다.

예제 코드

다음 프로그램은 OpenCV를 사용하여 이미지의 밝기를 줄이는 방법을 보여줍니다.

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int main() {
    Mat original; // 원본 이미지를 불러올 행렬 선언//
    Mat dimmer;// 밝기 조절 후 이미지를 저장할 행렬 선언//
    namedWindow("Original");// 원본 이미지를 표시할 창 생성//
    namedWindow("Dimmer");// 어두운 이미지를 표시할 창 생성//
    original = imread("bright.jpg");// 이미지 파일 읽기//
    dimmer = original - Scalar(80, 80, 80);// 스칼라 값을 빼서 밝기 감소//
    imshow("Original", original);// 원본 이미지 출력//
    imshow("Dimmer", dimmer);// 어두워진 이미지 출력//
    waitKey(0);// 키 입력 대기//
    return(0);
}

실행 결과

프로그램을 실행하면 원본 이미지와 함께 각 채널에서 80씩 차감되어 어두워진 이미지가 두 개의 별도 창에 나타납니다.

C++와 OpenCV를 활용한 이미지 밝기 줄이기 방법

참고 사항

스칼라 값의 세 인자는 각각 B, G, R 순서를 나타내며, 세 값을 다르게 설정하면 단순히 어둡게 하는 것을 넘어 특정 색조를 강조하거나 감소시키는 효과도 얻을 수 있습니다. 또한 뺄셈 결과가 0보다 작아지는 경우 자동으로 0으로 포화(saturate) 처리되므로, 값이 잘리는 오버플로우 현상에 대해 별도로 걱정할 필요가 없습니다.