본문 바로가기

IT

OpenCV로 간단한 얼굴 모자이크 앱 만들기

이번 글에서는 OpenCV로 간단한 얼굴 모자이크 앱을 만드는 방법을 알려드릴게요.

 

OpenCV로 간단한 얼굴 모자이크 앱


이 프로젝트는 얼굴을 자동으로 인식하고 해당 영역에 블러(모자이크)를 씌우는 방식이에요.
실시간 웹캠 영상에도 적용할 수 있고,

이미지 파일에도 손쉽게 사용할 수 있어서 실용성이 높아요.

얼굴 모자이크 앱의 기본 개념 이해하기

얼굴 모자이크 앱은 크게 두 단계로 구성돼요.
먼저 얼굴을 검출하고, 그다음 검출된 얼굴 영역에 블록이나 픽셀화를 적용해 가리는 방식이에요.
얼굴 검출은 보통 Haar Cascade를 사용하며,

모자이크 처리는 cv2.blur() 또는 cv2.resize()로 구현할 수 있어요.


이 기능은 사진 속 개인정보 보호나 영상 클립 편집 등에 자주 사용돼요.
특히 OpenCV의 성능 덕분에 실시간 처리도 충분히 가능해요.

Haar Cascade로 얼굴 검출하기

OpenCV는 기본적으로 Haar Cascade XML 모델을 제공해요.
이 모델을 사용하면 이미지나 영상에서 얼굴을 자동으로 탐지할 수 있어요.


탐지된 얼굴의 좌표는 (x, y, w, h) 형식으로 반환되기 때문에

이 좌표를 기준으로 모자이크 처리를 할 수 있어요.

 

import cv2

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
img = cv2.imread("face.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)

이제 faces 변수에 얼굴 위치가 담겼으니 모자이크 처리를 이어서 할 수 있어요.

 

얼굴 영역에 모자이크(블러) 처리하기

얼굴 위치를 알게 되면 해당 영역을 잘라내어 블러를 적용한 뒤

다시 원래 이미지에 덮어씌우면 돼요.
보통 cv2.GaussianBlur() 또는 cv2.resize()를 이용한 픽셀화 방식이 자주 쓰여요.
픽셀화를 하려면 먼저 얼굴 영역을 작게 줄였다가 다시 원래 크기로 확대하는 방법을 써요.

 

for (x, y, w, h) in faces:
    roi = img[y:y+h, x:x+w]
    roi = cv2.resize(roi, (16, 16), interpolation=cv2.INTER_LINEAR)
    roi = cv2.resize(roi, (w, h), interpolation=cv2.INTER_NEAREST)
    img[y:y+h, x:x+w] = roi

이렇게 하면 얼굴 부분만 딱 모자이크가 적용돼요. 아주 깔끔하죠?

실시간 웹캠 영상에 적용하기

웹캠에서도 위 방법을 그대로 사용할 수 있어요.
cv2.VideoCapture()로 프레임을 받아오고,

각 프레임마다 얼굴을 검출하고 모자이크를 적용하면 실시간 얼굴 모자이크 앱이 완성돼요.


카메라 보안, 온라인 방송, 프라이버시 보호용 앱 등에 유용하게 활용할 수 있어요.

cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x, y, w, h) in faces:
        roi = frame[y:y+h, x:x+w]
        roi = cv2.resize(roi, (16, 16))
        roi = cv2.resize(roi, (w, h))
        frame[y:y+h, x:x+w] = roi
    cv2.imshow("Mosaic", frame)
    if cv2.waitKey(1) == 27: break
cap.release()
cv2.destroyAllWindows()

 

팁과 확장 아이디어

  • 얼굴 이외에도 번호판, 사람 전체 등을 모자이크 할 수 있어요.
  • 모자이크 대신 mask, emoji, 도형 등을 덧씌우는 방식으로 재미있는 효과를 만들 수도 있어요.
  • DNN 기반 얼굴 검출을 사용하면 더 정확하고 빠른 검출이 가능해요.
  • 얼굴이 회전하거나 멀리 있을 때 정확도가 떨어질 수 있으니 조명과 해상도에 주의하세요.
  • 영상 저장을 원하면 cv2.VideoWriter를 함께 활용해 보세요.