728x90
반응형
저번에는 실시간 얼굴 탐지를 했었다. 이번에는 실시간으로 얼굴 탐지를 하고 탐지된 모든 얼굴 영역을
각각 탐지된 얼굴 이미지를 축소-확대한 이미지로 대체하는 방식으로 모자이크 처리를 해볼 것이다.
전에 했던 내용은 설명하지 않을 것이니 이해가 안 되는 사람은 이전 글을 참고하도록 하자!
2. OpenCV를 이용한 실시간 얼굴 탐지: https://jinho-study.tistory.com/230
아래는 전체 코드를 정리한 코드이다.
import numpy as np
import cv2
xml = 'haarcascades/haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(xml)
cap = cv2.VideoCapture(0) # 노트북 웹캠을 카메라로 사용
cap.set(3,640) # 너비
cap.set(4,480) # 높이
while(True):
ret, frame = cap.read()
frame = cv2.flip(frame, 1) # 좌우 대칭
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray,1.05,5)
print("Number of faces detected: " + str(len(faces)))
if len(faces):
for (x,y,w,h) in faces:
face_img = frame[y:y+h, x:x+w] # 탐지된 얼굴 이미지 crop
face_img = cv2.resize(face_img, dsize=(0, 0), fx=0.04, fy=0.04) # 축소
face_img = cv2.resize(face_img, (w, h), interpolation=cv2.INTER_AREA) # 확대
frame[y:y+h, x:x+w] = face_img # 탐지된 얼굴 영역 모자이크 처리
cv2.imshow('result', frame)
k = cv2.waitKey(30) & 0xff
if k == 27: # Esc 키를 누르면 종료
break
cap.release()
cv2.destroyAllWindows()
얼굴 영역에 박스를 치는 코드가 빠졌고, 모자이크 처리를 해주는 코드 4줄이 추가되었다.
face_img = frame[y:y+h, x:x+w] -> 탐지된 얼굴 영역의 이미지를 face_img에 저장
face_img = cv2.resize(face_img, dsize=(0, 0), fx=0.04, fy=0.04) -> face_img의 높이와 너비를 0.04배 해줌
face_img = cv2.resize(face_img, (w, h), interpolation=cv2.INTER_AREA) -> face_img를 원래 비율로 되돌려준다. 이 과정에서 이미지가 깨짐
frame[y:y+h, x:x+w] = face_img -> 탐지된 얼굴 영역을 face_img로 바꿔줌
위의 코드를 실행하면 아래와 같이 실시간으로 탐지된 얼굴이 잘 모자이크 되고 있는 것을 확인할 수 있다.
728x90
반응형
'Projects > 얼굴 인식과 모자이크 처리' 카테고리의 다른 글
실시간 얼굴 인식과 모자이크 처리 (12) | 2020.06.20 |
---|---|
0. OpenCV를 이용해 셀카 찍기 (0) | 2020.03.24 |
3.2 OpenCV를 이용한 실시간 얼굴 모자이크 처리 feat by 럭키짱의 강건마 (0) | 2020.03.23 |
2. OpenCV를 이용한 실시간 얼굴 탐지 (0) | 2020.03.23 |
1. OpenCV를 이용한 얼굴 탐지 (0) | 2020.03.23 |