이것도 알아야 하네?

[Python] OpenCV 예제 따라하기—4. 이미지 필터링 기법 (평균 블러, 가우시안 블러, 미디언 블러, Bilateral) 본문

프로그래밍/이미지 처리

[Python] OpenCV 예제 따라하기—4. 이미지 필터링 기법 (평균 블러, 가우시안 블러, 미디언 블러, Bilateral)

아직 갈 길이 먼 사람 2025. 4. 6. 16:31
728x90

 

OpenCV 예제 따라하기 시리즈

0. 이미지 읽고 쓰기

> 1. 이미지 합성

> 2. 흑백 이미지로 변환

> 3. 이미지 사이즈 변경

 

 

OpenCV에서는 다양한 이미지 필터링 기법을 제공하며, 노이즈 제거 🧹 또는 선명도 강화 🔍 등의 작업에 효과적으로 사용됩니다. 아래는 가장 많이 쓰이는 필터들의 설명입니다.

1. 평균 블러 (Box Blur) 📦

cv2.blur() 함수를 이용해 주변 픽셀들의 평균값으로 대체하는 방식입니다. 가장 단순한 블러링 기법으로, 이미지 전체를 부드럽게 만들어줍니다.

cv2.blur(src, ksize)
  • src (Required): 필터링할 원본 이미지
  • ksize (Required): 커널의 크기 (예: (5,5))

2. 가우시안 블러 (Gaussian Blur) 🌫

cv2.GaussianBlur() 함수는 가우시안 커널을 사용하여 블러링을 수행합니다. 중심 픽셀에 가까울수록 더 많은 가중치를 부여하여 자연스러운 흐림 효과를 만듭니다.

cv2.GaussianBlur(src, ksize, sigmaX)

3. 미디언 블러 (Median Blur) 🪞

cv2.medianBlur() 함수는 커널 내의 중앙값으로 픽셀을 대체하여, 소금&후추 노이즈(Salt-and-Pepper noise) 제거에 탁월합니다.

cv2.medianBlur(src, ksize)

4. Bilateral 필터 🧼🎯

cv2.bilateralFilter() 함수는 경계선을 보존하면서 블러링하는 고급 기법입니다. 색상차와 거리차를 동시에 고려하여 선명한 엣지를 유지합니다.

cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace)

5. 샤프닝 (Sharpening) ✒️

샤프닝은 커널 연산을 통해 이미지의 경계를 강조합니다. 아래처럼 커널을 직접 정의하여 적용합니다.

import cv2
import numpy as np

img = cv2.imread('sample.jpg')
kernel = np.array([[0, -1, 0],
                   [-1, 5,-1],
                   [0, -1, 0]])
sharpened = cv2.filter2D(img, -1, kernel)

위 코드의 커널은 중앙 픽셀을 강조하고 주변 픽셀을 억제하는 방식으로 샤프닝을 구현합니다.

6. 실습 예시 🔧

img = cv2.imread('sample.jpg')

blur = cv2.blur(img, (5,5))
gaussian = cv2.GaussianBlur(img, (5,5), 0)
median = cv2.medianBlur(img, 5)
bilateral = cv2.bilateralFilter(img, 9, 75, 75)

필터에 따라 결과 이미지의 경계선 보존 정도와 부드러움이 다르게 나타납니다. 여러 필터를 비교해보면서 적절한 방법을 선택하는 것이 중요합니다 💡

 

 

728x90
Comments