파이썬과 OpenCV를 이용한 이미지 필터링 및 적용하기

이미지 처리는 컴퓨터 비전 분야에서 중요한 작업 중 하나입니다. 이미지 필터링은 이미지에 다양한 필터를 적용하여 이미지를 향상시키는 작업을 의미합니다. 이번 글에서는 파이썬과 OpenCV를 활용하여 이미지 필터링을 수행하는 방법에 대해 알아보겠습니다.

OpenCV란?

OpenCV는 이미지 및 비디오 처리를 위한 오픈 소스 라이브러리입니다. 파이썬에서 OpenCV를 사용하면 이미지 및 비디오를 로드하고 다양한 작업을 수행할 수 있습니다.

필터링 종류

  1. 블러 (Blur) 필터: 이미지의 픽셀 값을 주변 픽셀 값의 평균으로 대체하여 이미지를 흐리게 만듭니다.
  2. 가우시안 블러 (Gaussian Blur) 필터: 주변 픽셀 값에 가중치를 고려하여 평균을 계산하는 블러 필터입니다. 이미지의 흐림 효과를 더 자연스럽게 만듭니다.
  3. 엣지 검출 (Edge Detection) 필터: 이미지에서 경계를 감지하는 작업을 수행합니다. 대표적인 엣지 검출 알고리즘으로는 캐니 에지 검출 방법이 있습니다.
  4. 샤프닝 (Sharpening) 필터: 이미지의 경계를 강조하여 이미지를 더 선명하게 만듭니다.
  5. 이진화 (Binarization) 필터: 이미지를 흑백으로 변환하는 작업을 수행합니다. 이미지의 특정 임계값을 기준으로 픽셀 값을 0 또는 255로 설정합니다.

예제 코드

아래는 파이썬과 OpenCV를 사용하여 이미지에 각각의 필터를 적용하는 예제 코드입니다.

import cv2

# 이미지 로드
image = cv2.imread('image.jpg')

# 블러 필터 적용
blur_image = cv2.blur(image, (5, 5))

# 가우시안 블러 필터 적용
gaussian_blur_image = cv2.GaussianBlur(image, (5, 5), 0)

# 엣지 검출
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray_image, 100, 200)

# 샤프닝 필터 적용
kernel = np.array([[0, -1, 0],
                   [-1, 5, -1],
                   [0, -1, 0]])
sharpened_image = cv2.filter2D(image, -1, kernel)

# 이진화 필터 적용
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_, binary_image = cv2.threshold(gray_image, 127, 255, cv2.THRESH_BINARY)

# 결과 이미지 출력
cv2.imshow('Original Image', image)
cv2.imshow('Blur Image', blur_image)
cv2.imshow('Gaussian Blur Image', gaussian_blur_image)
cv2.imshow('Edge Detection', edges)
cv2.imshow('Sharpened Image', sharpened_image)
cv2.imshow('Binarization', binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

위 코드를 실행하면 이미지에 각각의 필터가 적용된 결과를 확인할 수 있습니다.

결론

파이썬과 OpenCV를 이용하여 이미지에 다양한 필터를 적용하는 방법에 대해 알아보았습니다. 이미지 필터링을 통해 이미지의 선명도 개선, 잡음 제거, 경계 검출 등 다양한 작업을 수행할 수 있습니다. 다양한 필터를 적용하여 원하는 결과를 얻어보세요!


참고 자료: