본문으로 건너뛰기
실습하기

OpenCV를 활용한 고급 이미지 처리 기법

이번 수업에서는 OpenCV를 활용한 엣지(가장자리) 검출, 블러링, 객체 탐지 등의 고급 이미지 처리 기법을 다루겠습니다.


1. 엣지(Edge) 검출 - Canny Edge Detection

엣지 검출(Edge Detection)은 이미지에서 경계를 감지하는 기법입니다.

Canny Edge Detection은 가장 널리 사용되는 경계선 검출 알고리즘입니다.

Canny 엣지 검출 예시
import cv2

# 이미지 불러오기
image = cv2.imread("sample.jpg", cv2.IMREAD_GRAYSCALE)

# Canny 엣지 검출 적용
edges = cv2.Canny(image, 100, 200)

cv2.imshow("Canny Edges", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. 블러(Blur) 및 노이즈 제거

이미지에서 노이즈를 줄이거나 부드럽게(Blur) 처리할 때는 GaussianBlur()를 사용할 수 있습니다.

가우시안 블러 적용 예시
blurred = cv2.GaussianBlur(image, (5, 5), 0)

cv2.imshow("Blurred Image", blurred)
cv2.waitKey(0)
cv2.destroyAllWindows()

여기서 (5, 5)는 커널 크기(kernel size)로, 값이 클수록 블러 효과가 강해집니다.


3. 윤곽선 검출(Contour Detection)

윤곽선(Contour)은 이미지에서 물체의 경계를 찾는 기법입니다.

OpenCV의 cv2.findContours()를 사용하여 이를 감지할 수 있습니다.

윤곽선 검출 예시
# 이미지 불러오기 및 변환
image = cv2.imread("sample.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
_, threshold = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 윤곽선 검출
contours, _ = cv2.findContours(threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

# 검출된 윤곽선 그리기
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)

cv2.imshow("Contours", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

위 코드에서는 이진화(Thresholding) 후 cv2.findContours()를 사용하여 윤곽선을 감지하고, cv2.drawContours()를 통해 초록색으로 표시합니다.


4. 얼굴 및 객체 탐지 (Haar Cascade)

OpenCV는 미리 학습된 Haar Cascade Classifier를 이용하여 얼굴을 탐지할 수 있습니다.

얼굴 탐지 예시
# Haar Cascade 분류기 로드
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

# 이미지 불러오기 및 변환
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 얼굴 탐지
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

# 얼굴 위치에 사각형 그리기
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2)

위 코드는 얼굴을 감지하고, 사각형 박스를 그려 표시하는 예제입니다.


이번 수업에서는 엣지 검출, 블러링, 윤곽선 검출, 얼굴 탐지 등의 고급 OpenCV 기능을 배웠습니다.

다음 수업에서는 지금까지 배운 내용을 바탕으로 간단한 퀴즈를 풀어보겠습니다!


참고 자료

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!