
사진을 다루는데 가장 중요한 작업 중 하나는 이미지에서 얼굴을 감지하고 자르는 것이다. 이 글에서는 Python을 사용하여 사진에서 얼굴만 자르고 저장하는 방법을 살펴보겠다. 이 작업을 수행하는 데 사용할 수 있는 라이브러리에는 OpenCV, dlib, Pillow 등 널리 사용되는 라이브러리가 많이 있다. 이 글에서는 가장 널리 사용되는 컴퓨터 비전 라이브러리 중 하나인 OpenCV를 사용하겠다.
OpenCV를 사용하기 전에 먼저 설치해야 한다.
pip install opencv-python
이제 OpenCV를 설치했으므로 필요한 라이브러리를 가져오고 이미지를 로드할 수 있다.
import cv2
import numpy as np
# 사진에서 얼굴 인식을 위해 cascade classifier 로드
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
# 이미지 로드
img = cv2.imread("example.jpg")이미지를 로드했으므로 이제 이미지에서 얼굴 감지를 시작할 수 있다. 이 작업은 CascadeClassifier 클래스의 detectMultiscale 메서드를 사용하여 수행된다. 이 메서드는 이미지를 받아 사각형 목록을 반환하며, 각 사각형은 얼굴을 나타낸다.
faces = face_cascade.detectMultiscale(img, scaleFactor=1.1, minNeighbors=5)scaleFactor 매개변수는 감지 window의 크기를 제어하며, scaleFactor 값이 작을수록 감지 window가 커지고, 스케일팩터 값이 클수록 감지 window가 작아진다. 감지 window 크기를 줄이면 더 작은 얼굴을 감지할 수 있지만 얼굴 감지 프로세스가 느려진다.
minNeighbors 매개변수는 값이 높을수록 오탐지를 제거하는 데 도움이 되지만 일부 얼굴이 누락될 위험이 높아지는 반면 값이 낮을수록 얼굴 감지가 더 민감해지지만 오탐지 위험도 높아진다.
최상의 얼굴 인식 결과를 얻으려면 scaleFactor와 최소 minNeighbors의 적절한 균형을 찾는 것이 중요한다. 특정 사용 사례에 가장 적합한 조합을 찾으려면 다양한 값으로 실험해봐야 할 수도 있다.
얼굴을 감지했으면 사각형 목록을 반복하여 각 얼굴을 자를 수 있다. 이미지를 자르려면 자르기의 시작점과 끝점을 지정하기만 하면 된다. 이 경우 각 사각형의 왼쪽 상단과 오른쪽 하단을 사용한다.
for (x, y, w, h) in faces:
    face = img[y:y+h, x:x+w]
    cv2.imwrite("face.jpg", face)
CloneCoding
한 줄의 코드에서 시작되는 혁신!
![[JavaScript] html2canvas를 활용하여 스크린샷을 다운로드 하는방법](https://img.clonecoding.com/thumb/101/16x9/320/javascript-html2canvas를-활용하여-스크린샷을-다운로드-하는방법.webp) html2canvas 라이브러리를 이용하여 웹페이지 스크린샷을 다운로드 하는 방법을 설명한다. html2canvas 특징과 장점, 설치 및 사용방법 그리고 주의사항에 대해서도 함께 알아본다
html2canvas 라이브러리를 이용하여 웹페이지 스크린샷을 다운로드 하는 방법을 설명한다. html2canvas 특징과 장점, 설치 및 사용방법 그리고 주의사항에 대해서도 함께 알아본다![[CSS] 다크모드 구현 하는 방법 - 시스템 설정 기반 및 사용자 선택기반 모드변경](https://img.clonecoding.com/thumb/100/16x9/320/css-다크모드-구현-하는-방법-시스템-설정-기반-및-사용자-선택기반-모드변경.webp) 웹페이지에 다크모드를 구현하는 방법에 대해 설명한다. 시스템 설정을 기반으로 다크모드를 구현하는법, 사용자 선택을 기반으로 다크모드를 구현하는 법에 대해 알아보자.
웹페이지에 다크모드를 구현하는 방법에 대해 설명한다. 시스템 설정을 기반으로 다크모드를 구현하는법, 사용자 선택을 기반으로 다크모드를 구현하는 법에 대해 알아보자.![[Next.js] SSR, SSG, CSR 언제 사용하는것이 좋을까 - 적절한 활용 사례](https://img.clonecoding.com/thumb/99/16x9/320/next-js-ssr-ssg-csr-언제-사용하는것이-좋을까-적절한-활용-사례.webp) Next.js에서 SSR(Server Side Rendering), SSG(Static Site Generation), CSR(Client Side Rendering)렌더링 방식중 어떤 렌더링 방식이 어떤 사이트 카테고리에서 잘 어울리는지 설명한다.
Next.js에서 SSR(Server Side Rendering), SSG(Static Site Generation), CSR(Client Side Rendering)렌더링 방식중 어떤 렌더링 방식이 어떤 사이트 카테고리에서 잘 어울리는지 설명한다.![[CSS] 가상 선택자(Pseudo selector) 완벽 가이드 - 꼭 알아야하는 스타일링 기법](https://img.clonecoding.com/thumb/98/16x9/320/css-가상-선택자-pseudo-selector-완벽-가이드-꼭-알아야하는-스타일링-기법.webp) CSS 가상 선택자(Pseudo selector)에 대해 깊이있게 설명 한다. :first-child, :last-child, :nth-child(n) 등을 배우고 실용적인 활용 사례를 알아보자.
CSS 가상 선택자(Pseudo selector)에 대해 깊이있게 설명 한다. :first-child, :last-child, :nth-child(n) 등을 배우고 실용적인 활용 사례를 알아보자.![[Next.js] 3가지 렌더링 SSR, CSR, SSG 이해하기: 장단점 분석](https://img.clonecoding.com/thumb/97/16x9/320/next-js-3가지-렌더링-ssr-csr-ssg-이해하기-장단점-분석.webp) Next.js의 3가지 렌더링 방식인 서버 사이드 렌더링(SSR), 클라이언트 사이드 렌더링(CSR), 그리고 정적 사이트 생성(SSG)에 대한 작동방식, 장단점 등에대해 깊이있게 알아본다.
Next.js의 3가지 렌더링 방식인 서버 사이드 렌더링(SSR), 클라이언트 사이드 렌더링(CSR), 그리고 정적 사이트 생성(SSG)에 대한 작동방식, 장단점 등에대해 깊이있게 알아본다.