반응형

Blur(블러)는 이미지를 부드럽게 만들어주는 필터로, 노이즈를 제거하거나 이미지의 중요한 부분을 강조할 때 사용합니다. 예를 들어, 사진에서 배경을 부드럽게 처리하여 피사체에 집중하게 만들고 싶을 때 유용합니다. OpenCV에서는 다양한 블러 방법을 제공합니다.

Import packages

import cv2
import numpy as np
import matplotlib.pyplot as plt

Function to Display Images in Jupyter Notebook

Jupyter Notebook 및 Google Colab에서 이미지를 표시할 수 있도록 Function으로 정의합니다.

def img_show(title='image', img=None, figsize=(8, 5)):
    plt.figure(figsize=figsize)

    if type(img) == list:
        titles = title if type(title) == list else [title] * len(img)

        for i in range(len(img)):
            rgbImg = cv2.cvtColor(img[i], cv2.COLOR_GRAY2RGB) if len(img[i].shape) <= 2 else cv2.cvtColor(img[i], cv2.COLOR_BGR2RGB)
            plt.subplot(1, len(img), i + 1)
            plt.imshow(rgbImg)
            plt.title(titles[i])
            plt.xticks([]), plt.yticks([])

        plt.show()
    else:
        rgbImg = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB) if len(img.shape) < 3 else cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        plt.imshow(rgbImg)
        plt.title(title)
        plt.xticks([]), plt.yticks([])
        plt.show()

Load Image

이미지를 불러옵니다.

cv2_image = cv2.imread('asset/images/test_image.jpg', cv2.IMREAD_COLOR)

Blur

OpenCV에서 이미지를 블러 처리하는 방법으로는 주로 GaussianBlur, MedianBlur, BilateralFilter 등이 있습니다. 각 방법은 서로 다른 효과를 제공하므로, 목적에 맞는 블러 방법을 선택할 수 있습니다.

Gaussian Blur

가장 일반적인 블러 방식으로, 가우시안 커널을 사용해 주변 픽셀의 평균값을 계산하여 이미지를 부드럽게 만듭니다.

gaussian_blur = cv2.GaussianBlur(cv2_image, (15, 15), 0)
img_show("Gaussian Blur", gaussian_blur)

Median Blur

노이즈 제거에 효과적이며, 특히 이미지 내 점 형태의 노이즈를 제거하는 데 유용합니다. 커널 내의 중간값으로 픽셀 값을 대체합니다.

median_blur = cv2.medianBlur(cv2_image, 15)
img_show("Median Blur", median_blur)

Bilateral Filter

엣지를 유지하면서 블러를 적용하는 방법으로, 고급스러운 블러 처리가 필요할 때 사용됩니다. 공간적인 거리에 따라 가중치를 주기 때문에 엣지가 뚜렷하게 남습니다.

bilateral_blur = cv2.bilateralFilter(cv2_image, 15, 75, 75)
img_show("Bilateral Filter", bilateral_blur)

위와 같이 다양한 블러 기법을 사용해 이미지를 부드럽게 처리할 수 있습니다. 각 방법은 특유의 효과를 가지고 있으므로, 작업 목적에 따라 적절한 블러 방식을 선택하면 좋습니다.

반응형