본 실습에서는 Python과 OpenCV를 이용하여 이미지에 다양한 컨볼루션 필터를 적용해보고 CNN의 핵심 개념인 컨볼루션 연산을 이해해본다.
1. 컨볼루션(Convolution)이란?
CNN(Convolutional Neural Network)은 이미지 분류, 객체 탐지, 얼굴 인식 등 다양한 컴퓨터 비전 분야에서 사용되는 대표적인 딥러닝 모델이다.
CNN의 핵심은 바로 컨볼루션(Convolution) 연산에 있다.
컨볼루션은 작은 크기의 필터(Kernel)를 이미지 위에서 이동시키며 주변 픽셀과 연산을 수행하여 특징(Feature)을 추출하는 과정이다.
필터의 종류에 따라 이미지에서 서로 다른 특징을 추출할 수 있으며, 대표적으로 다음과 같은 효과를 얻을 수 있다.
- Blur (흐림 효과)
- Sharpen (선명화)
- Edge Detection (윤곽선 검출)
이번 실습에서는 OpenCV의 filter2D() 함수를 이용하여 세 가지 대표적인 컨볼루션 필터를 적용해 보았다.
2. 실습 환경
본 실습은 Google Colab 환경에서 진행하였다.
사용 라이브러리는 다음과 같다.
import cv2
import numpy as np
from matplotlib import pyplot as plt
from google.colab import drive3. 실습 코드
다음 코드는 원본 이미지에 Blur Filter, Sharpen Filter, Edge Detection Filter를 적용하고 결과를 한 화면에 출력하는 코드이다.
import cv2
import numpy as np
from matplotlib import pyplot as plt
from google.colab import drive
# Google Drive 마운트
drive.mount('/content/drive')
# 이미지 경로
image_path = "/content/drive/MyDrive/Colab Notebooks/conv_img/lena.jpg"
# 흑백 이미지로 읽기
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
# 이미지 로드 확인
if image is None:
print("이미지 로드 실패! 경로를 확인하세요.")
exit()
# ==========================================
# 1. Blur Filter
# ==========================================
blur_kernel = np.ones((3, 3), np.float32) / 9
blur_img = cv2.filter2D(
src=image,
ddepth=-1,
kernel=blur_kernel
)
# ==========================================
# 2. Sharpen Filter
# ==========================================
sharpen_kernel = np.array([
[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]
], dtype=np.float32)
sharpen_img = cv2.filter2D(
src=image,
ddepth=-1,
kernel=sharpen_kernel
)
# ==========================================
# 3. Edge Detection
# ==========================================
edge_kernel = np.array([
[-1, -1, -1],
[-1, 8, -1],
[-1, -1, -1]
], dtype=np.float32)
edge_img = cv2.filter2D(
src=image,
ddepth=-1,
kernel=edge_kernel
)
# ==========================================
# 결과 출력
# ==========================================
plt.figure(figsize=(12,10))
plt.subplot(2,2,1)
plt.imshow(image, cmap='gray')
plt.title("Original Image")
plt.axis("off")
plt.subplot(2,2,2)
plt.imshow(blur_img, cmap='gray')
plt.title("Blur Filter")
plt.axis("off")
plt.subplot(2,2,3)
plt.imshow(sharpen_img, cmap='gray')
plt.title("Sharpen Filter")
plt.axis("off")
plt.subplot(2,2,4)
plt.imshow(edge_img, cmap='gray')
plt.title("Edge Detection Filter")
plt.axis("off")
plt.tight_layout()
plt.show()4. 사용된 컨볼루션 커널
Blur Filter
주변 픽셀의 평균값을 이용하여 이미지를 부드럽게 만든다.
1/9 ×
1 1 1
1 1 1
1 1 1
Blur Filter는 노이즈 제거와 전처리 과정에서 자주 사용된다.
Sharpen Filter
이미지의 세부 정보와 경계 부분을 강조하는 필터이다.
0 -1 0
-1 5 -1
0 -1 0
샤프닝 필터를 적용하면 윤곽선이 더욱 선명하게 나타난다.
Edge Detection Filter
이미지의 밝기 변화가 큰 영역을 추출하여 경계선을 강조한다.
-1 -1 -1
-1 8 -1
-1 -1 -1
객체 인식 및 이미지 분석 분야에서 자주 사용되는 필터이다.
5. 실험 결과
아래 그림은 원본 이미지와 다양한 컨볼루션 필터를 적용한 결과를 한 번에 비교한 것이다.

(Original Image, Blur Filter, Sharpen Filter, Edge Detection Filter가 포함된 4분할 결과 이미지)
좌측 상단은 원본 이미지이며, 우측 상단은 Blur Filter를 적용한 결과이다.
좌측 하단은 Sharpen Filter를 적용한 결과이고, 우측 하단은 Edge Detection Filter를 적용한 결과이다.
6. 결과 분석
각 필터는 서로 다른 특징을 추출하는 것을 확인할 수 있다.
Blur Filter
주변 픽셀의 평균값을 이용하기 때문에 이미지가 부드러워지고 노이즈가 감소한다.
Sharpen Filter
윤곽선과 세부 정보가 강조되어 이미지가 더욱 선명하게 보인다.
Edge Detection Filter
배경 정보는 대부분 제거되고 물체의 경계선만 강조된다.
이를 통해 동일한 이미지라도 사용하는 커널에 따라 전혀 다른 특징을 추출할 수 있음을 확인할 수 있다.
7. CNN과 컨볼루션의 관계
이번 실습에서는 사람이 직접 커널 값을 정의하였다.
하지만 실제 CNN에서는 이러한 필터를 사람이 설계하지 않는다.
CNN은 학습 과정에서 최적의 필터를 자동으로 생성하고 업데이트한다.
즉,
- 랜덤한 필터로 시작
- 학습 데이터를 반복적으로 학습
- 특징 추출에 적합한 필터로 최적화
과정을 수행하게 된다.
이러한 특징 추출 과정을 반복하면서 CNN은 얼굴, 자동차, 동물 등 다양한 객체를 인식할 수 있게 된다.
8. 마무리
이번 실습에서는 OpenCV의 filter2D() 함수를 이용하여 Blur Filter, Sharpen Filter, Edge Detection Filter를 적용해 보았다.
실험 결과를 통해 컨볼루션 커널이 이미지의 특징을 어떻게 변화시키는지 확인할 수 있었다.
CNN 역시 동일한 원리를 기반으로 다양한 특징을 학습하며 이미지 분류와 객체 인식을 수행한다.
따라서 컨볼루션은 딥러닝과 컴퓨터 비전을 이해하기 위해 반드시 알아야 할 핵심 개념이라고 할 수 있다.

