이미지 샤프닝(Sharpening)은 블러링(Blurring)과 정반대의 개념으로, 이미지의 윤곽선과 디테일을 더욱 또렷하게 만드는 처리 과정입니다.
OpenCV 라이브러리를 사용해 이미지의 선명도를 변경하려면 언샵 마스킹(Unsharp Masking) 기법을 활용합니다. 이 기법은 다음과 같은 순서로 진행됩니다.
이미지 선명도 변경의 기본 원리
- 가우시안 필터 적용: 원본 이미지에
GaussianBlur()메서드를 사용해 부드럽게(흐리게) 만듭니다. - 차이 계산: 원본 이미지에서 흐려진 이미지를 뺍니다. 이 결과물이 바로 이미지의 세부 디테일(고주파 성분)입니다.
- 디테일 추가: 원본 이미지에 추출한 디테일을 가중치를 곱해 다시 더하면 선명도가 강조된 이미지가 완성됩니다.
수식으로 표현하면 다음과 같습니다.
결과 = 원본 × 1.5 − 흐린 이미지 × 0.5
즉, addWeighted() 메서드를 사용해 두 이미지의 가중 합을 계산함으로써 선명도를 조절할 수 있습니다.
예제 코드
아래는 Java OpenCV로 이미지의 선명도를 변경하는 전체 예제 코드입니다.
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class AlteringSharpness {
public static void main(String[] args) {
// OpenCV 네이티브 라이브러리 로드
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// 파일에서 이미지 읽기
String file = "D:\\Image\\lamma1.jpg";
Mat src = Imgcodecs.imread(file, Imgcodecs.IMREAD_COLOR);
// 빈 매트릭스 생성
Mat dest = new Mat(src.rows(), src.cols(), src.type());
// 가우시안 블러 적용 (커널 크기 0, 시그마 10)
Imgproc.GaussianBlur(src, dest, new Size(0, 0), 10);
// 원본 1.5배 + 흐린 이미지 -0.5배 → 선명도 강조
Core.addWeighted(src, 1.5, dest, -0.5, 0, dest);
// 결과 이미지 저장
Imgcodecs.imwrite("D:\\Image\\altering_sharpness_100.jpg", dest);
}
}
코드 주요 단계 설명
- 라이브러리 로드:
System.loadLibrary(Core.NATIVE_LIBRARY_NAME)으로 OpenCV 네이티브 라이브러리를 불러옵니다. - 이미지 읽기:
Imgcodecs.imread()메서드로 지정된 경로의 이미지를 컬러(IMREAD_COLOR) 모드로 읽어옵니다. - 가우시안 블러:
Imgproc.GaussianBlur(src, dest, new Size(0,0), 10)에서 커널 크기를(0, 0)으로 설정하면 시그마 값(여기서는 10)을 기준으로 자동으로 최적의 커널이 계산됩니다. 시그마 값이 클수록 이미지가 더 많이 흐려집니다. - 가중 합 연산:
Core.addWeighted(src, 1.5, dest, -0.5, 0, dest)는 원본에 1.5를 곱하고 흐린 이미지에 -0.5를 곱해 더합니다. 이는 원본에서 흐린 이미지의 절반을 뺀 효과와 같으며, 그만큼 디테일이 강조되어 선명해집니다. - 결과 저장:
Imgcodecs.imwrite()메서드로 처리된 이미지를 파일로 저장합니다.
선명도 수준 조절하기
addWeighted()의 가중치 값을 변경하면 선명도의 강도를 자유롭게 조절할 수 있습니다.
| 가중치 조합 | 효과 |
|---|---|
| src: 1.5 / blur: -0.5 | 적당한 선명도 강조 |
| src: 2.0 / blur: -1.0 | 강한 선명도 강조 |
| src: 1.2 / blur: -0.2 | 약간의 선명도 강조 |
예를 들어, 가중치를 (2.0, -1.0)으로 설정하면 원본 대비 흐린 이미지의 전체가 차감되므로 훨씬 더 날카로운 결과를 얻을 수 있습니다.
입력 이미지

출력 결과

위 예제처럼 가우시안 블러와 가중 합 연산만으로도 별도의 고급 알고리즘 없이 손쉽게 이미지의 선명도를 조절할 수 있습니다. 사진 보정, 문서 스캔 개선 등 다양한 분야에서 유용하게 활용할 수 있습니다.