OpenCV는 이미지 처리 분야에서 가장 강력한 Python 패키지 중 하나입니다. 신호에 잡음이 섞여 있듯이, 이미지 역시 다양한 종류의 노이즈를 포함하고 있습니다. 이러한 노이즈는 주로 촬영 장비 자체(카메라 센서)에서 발생합니다. Python의 OpenCV 패키지는 이미지 스무딩(smoothing), 즉 블러링(blurring)을 수행할 수 있는 다양한 방법을 제공하며, 이번 글에서는 그중 대표적인 기법인 가우시안 필터(Gaussian Filter)를 활용한 이미지 블러링 방법을 알아보겠습니다.
가우시안 필터를 사용하면 이미지의 날카로운 가장자리(edge)를 부드럽게 다듬으면서도 과도한 흐림 현상은 최소화할 수 있습니다.
함수 문법(Syntax)
cv.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType=BORDER_DEFAULT]]])
각 매개변수의 의미는 다음과 같습니다.
src – 입력 이미지
dst – 출력 이미지
ksize – 가우시안 커널 크기 [높이, 너비]. [0, 0]으로 설정하면 시그마(sigma) 값으로부터 자동 계산됩니다.
sigmaX – X축(가로 방향) 기준 커널 표준편차
sigmaY – Y축(세로 방향) 기준 커널 표준편차
borderType – 커널이 이미지 경계에 적용될 때 경계 픽셀을 처리하는 방식 지정. 사용 가능한 값으로는 cv.BORDER_CONSTANT, cv.BORDER_REPLICATE, cv.BORDER_REFLECT, cv.BORDER_WRAP, cv.BORDER_DEFAULT, cv.BORDER_ISOLATED, cv.BORDER_TRANSPARENT 등이 있습니다.
가우시안 블러 적용 예제 코드
아래는 OpenCV 패키지를 사용해 이미지에 가우시안 블러를 적용하는 전체 프로그램입니다.
import cv2
import numpy
# 이미지 읽기
src = cv2.imread('LionKing.jpeg', cv2.IMREAD_UNCHANGED)
# 원본 이미지에 가우시안 블러 적용
dst = cv2.GaussianBlur(src,(3,3),cv2.BORDER_DEFAULT)
# 입력 이미지와 출력 이미지 나란히 표시
cv2.imshow("Gaussian Blur",numpy.hstack((src, dst)))
cv2.waitKey(0) # 키 입력이 있을 때까지 대기
cv2.destroyAllWindows() # 이미지 창 닫기실행 결과

커널 크기를 (3,3)으로 설정했을 때는 두 이미지가 거의 비슷해 보입니다. 이제 커널 크기를 키워 결과를 확인해 보겠습니다.
dst = cv2.GaussianBlur(src,(13,13),cv2.BORDER_DEFAULT)

커널 크기를 (13,13)으로 늘리자 두 이미지 사이에 뚜렷한 차이가 나타납니다. 이처럼 ksize 값이 클수록 블러 효과가 강해진다는 점을 확인할 수 있습니다. 상황에 맞게 커널 크기를 조절하여 원하는 수준의 부드러움을 얻으세요.