OpenCV의 org.opencv.core.Mat 클래스가 제공하는 convertTo() 메서드는 주어진 행렬에 필요한 연산을 수행하여 이미지의 대비(콘트라스트)와 밝기를 손쉽게 조절할 수 있습니다. 이 메서드는 다음과 같은 4개의 매개변수를 받습니다.
mat — 연산 결과를 저장할 빈 행렬로, 원본 행렬과 동일한 크기와 타입을 가져야 합니다.
rtype — 출력 행렬의 타입을 지정하는 정수값입니다. 음수를 전달하면 원본 행렬과 동일한 타입이 적용됩니다.
alpha — 이득(gain) 값으로, 반드시 0보다 커야 합니다(기본값 1).
beta — 바이어스(bias) 값입니다(기본값 0).
OpenCV Java 라이브러리로 이미지 밝기 조절하기
앞서 설명했듯이 이 메서드에 전달되는 beta 값은 이미지의 밝기를 결정합니다. 이 매개변수에 음수(-255~0 범위)를 지정하면 이미지가 어두워지고, 반대로 양수(0~255 범위)를 지정하면 이미지가 밝아집니다.
따라서 이미지의 밝기를 조절하려면 convertTo() 메서드를 호출할 때 빈 행렬, 타입 유지를 위한 -1, 알파 값 1, 그리고 밝기를 높이거나 낮추고 싶은 만큼의 beta 값을 순서대로 인자로 전달하면 됩니다.
예제 코드
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
public class AlteringBrightness {
public static void main (String[] args) {
// OpenCV 코어 라이브러리 로드
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
// 파일에서 이미지 읽기
String file ="D:\\Images\\tiger.jpg";
Mat src = Imgcodecs.imread(file, Imgcodecs.IMREAD_COLOR);
// 빈 행렬 생성
Mat dest = new Mat(src.rows(), src.cols(), src.type());
// 이미지 밝기 높이기
src.convertTo(dest, -1, 1, 100);
// 이미지 저장
Imgcodecs.imwrite("D:\\Images\\altering_brightness_100.jpg", dest);
}
}
입력 이미지

다음은 서로 다른 beta 값에 따른 출력 이미지 결과입니다.
beta 값: -100

beta 값: -50

beta 값: 50

beta 값: 100
