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

C++로 OpenCV에 트랙바(Trackbar)를 추가하는 방법

트랙바(Trackbar)는 OpenCV에서 이미지의 밝기, 대비 등 다양한 파라미터를 손쉽게 조절할 수 있도록 도와주는 슬라이더 형태의 GUI 컨트롤입니다. 일반적으로 파라미터를 변경하려면 코드를 수정한 뒤 다시 컴파일해야 하지만, 트랙바를 활용하면 마우스만으로 값을 실시간으로 조정할 수 있습니다. 덕분에 정적인 이미지 처리를 넘어 동적인 시각 효과를 손쉽게 구현할 수 있다는 큰 장점이 있습니다.

다음 예제 프로그램은 C++을 사용하여 OpenCV에 트랙바를 추가하는 방법을 보여줍니다.

예제 코드

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int main() {
    Mat original;//행렬(매트릭스) 선언//
    original = imread("sky.jpg");//이미지를 행렬에 불러오기//
    namedWindow("Slider");//이미지를 표시할 창 선언//
    int light = 50;//트랙바의 시작 값//
    createTrackbar("Brightness", "Slider", &light, 100);//밝기 조절용 트랙바 생성//
    int contrast = 50;//트랙바의 시작 값//
    createTrackbar("Contrast", "Slider", &contrast, 100);//대비 조절용 트랙바 생성//
    while (true) {
        Mat edit;//결과를 담을 행렬 선언//
        int Brightness = light - 50;//트랙바 값과 연동//
        double Contrast = contrast / 50.0;//트랙바 값과 연동//
        original.convertTo(edit, -1, Contrast, Brightness);//트랙바 변화에 따른 효과 적용//
        imshow("Slider", edit);//변경된 이미지 출력//
        waitKey(50);
    }
    return(0);
}

코드 설명

코드가 어떻게 동작하는지 단계별로 살펴보겠습니다.

1. 이미지 불러오기와 창 생성

imread() 함수로 'sky.jpg' 파일을 Mat 객체에 읽어 들인 후, namedWindow() 함수를 사용해 'Slider'라는 이름의 창을 생성합니다.

2. 트랙바 생성

createTrackbar() 함수는 총 4개의 주요 인자를 받습니다.
- 첫 번째 인자: 화면에 표시될 트랙바의 이름
- 두 번째 인자: 트랙바가 부착될 창의 이름
- 세 번째 인자: 현재 값을 저장할 정수 변수의 포인터
- 네 번째 인자: 트랙바의 최대값

여기서는 밝기(Brightness)와 대비(Contrast) 두 개의 트랙바를 만들고, 초기값을 각각 50으로 설정했습니다.

3. 트랙바 값 연동 및 효과 적용

무한 while 루프 안에서 트랙바의 현재 값을 읽어 옵니다. 밝기 값은 중심점 50을 기준으로 -50~+50 범위로 변환되고, 대비 값은 50.0으로 나누어 배율로 계산됩니다. 이후 convertTo() 함수가 원본 이미지에 대비(스케일)와 밝기(오프셋)를 적용하여 새로운 행렬에 저장합니다.

마지막으로 waitKey(50)는 약 50밀리초마다 화면을 갱신하며, 키 입력 여부를 확인합니다. 이 구조 덕분에 트랙바를 움직일 때마다 이미지가 즉시 반응하게 됩니다.

실행 결과

프로그램을 실행하면 아래와 같이 'Slider' 창에 이미지가 표시되고, 상단에 밝기(Brightness)와 대비(Contrast) 트랙바가 함께 나타납니다. 트랙바를 좌우로 움직이면 이미지의 밝기와 대비가 실시간으로 변하는 것을 확인할 수 있습니다.

C++로 OpenCV에 트랙바(Trackbar)를 추가하는 방법