파이썬에서 OpenCV를 사용하여 이미지에서 얼굴만 잘라내는 방법
환경
이번에는 파이썬을 사용합니다.
준비
OpenCV cascade 분류기를 사용합니다. 여기 에서 OpenCV를 clone하여 data/haarcascades
를 복사하는 것이 빠릅니다. 이번에는 다음과 같은 구조를 상정합니다.
root/
┣ haarcascades/(opencvからコピーしてきたディレクトリ)
┣ target.jpg
┗ imgcut.py
이 이미지는 PAKUTASO
코드
코드의 전체는 다음과 같습니다. 한 장의 이미지에서 얼굴을 잘라내는 처리로되어 있습니다. 복수의 화상에 대응시켜 조금 사용하기 쉽게 한 것을 GitHub 에 두고 있으므로 이쪽도 참고해 주세요.
import cv2
cascade = cv2.CascadeClassifier("./haarcascades/haarcascade_frontalface_default.xml")
img = cv2.imread("target.jpg")
face_pos = cascade.detectMultiScale(img)
for x,y,w,h in face_pos:
face = img[y:y+h, x:x+w]
cv2.imwrite("result.jpg", face)
코드 설명
OpenCV를 가져옵니다.
import cv2
cascade 분류기를 로드합니다. 이번에는 얼굴이 정면을 향하고 있으므로 haarcascade_frontalface_default.xml
를 사용합니다.
haarcascade_frontalface_default.xml
이미지를 ndarray로 변환합니다.
img = cv2.imread("target.jpg")
cascade 분류기를 사용하여 얼굴 좌표를 확인합니다.
face_pos = cascade.detectMultiScale(img)
얼굴 부분을 잘라냅니다. 좌표는 [[1003 135 196 196]]
와 같이 되어 있어 왼쪽으로부터 x 좌표, y 좌표, 폭, 높이가 들어가 있습니다. 여러 얼굴을 찾을 수 있습니다.
for x,y,w,h in face_pos:
face = img[y:y+h, x:x+w]
마지막으로 이미지를 저장합니다.
cv2.imwrite("result.jpg", face)
실행 결과
다음 명령으로 실행하면 result.jpg가 생성됩니다.
python imgcut.py
잘 된 것 같습니다. 정말 말할 수 없는 표정을 하고 있네요.
감상·고찰
이번에는 OpenCV를 사용하여 이미지에서 얼굴만 잘라내는 방법을 썼습니다. 모델 학습 등 다양한 장면에서 사용할 수 있다고 생각합니다. OpenCV 대단하다고 생각했습니다.
Reference
이 문제에 관하여(파이썬에서 OpenCV를 사용하여 이미지에서 얼굴만 잘라내는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/happyfukumoto/items/a30db241affcf0af6243
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
root/
┣ haarcascades/(opencvからコピーしてきたディレクトリ)
┣ target.jpg
┗ imgcut.py
코드의 전체는 다음과 같습니다. 한 장의 이미지에서 얼굴을 잘라내는 처리로되어 있습니다. 복수의 화상에 대응시켜 조금 사용하기 쉽게 한 것을 GitHub 에 두고 있으므로 이쪽도 참고해 주세요.
import cv2
cascade = cv2.CascadeClassifier("./haarcascades/haarcascade_frontalface_default.xml")
img = cv2.imread("target.jpg")
face_pos = cascade.detectMultiScale(img)
for x,y,w,h in face_pos:
face = img[y:y+h, x:x+w]
cv2.imwrite("result.jpg", face)
코드 설명
OpenCV를 가져옵니다.
import cv2
cascade 분류기를 로드합니다. 이번에는 얼굴이 정면을 향하고 있으므로 haarcascade_frontalface_default.xml
를 사용합니다.
haarcascade_frontalface_default.xml
이미지를 ndarray로 변환합니다.
img = cv2.imread("target.jpg")
cascade 분류기를 사용하여 얼굴 좌표를 확인합니다.
face_pos = cascade.detectMultiScale(img)
얼굴 부분을 잘라냅니다. 좌표는 [[1003 135 196 196]]
와 같이 되어 있어 왼쪽으로부터 x 좌표, y 좌표, 폭, 높이가 들어가 있습니다. 여러 얼굴을 찾을 수 있습니다.
for x,y,w,h in face_pos:
face = img[y:y+h, x:x+w]
마지막으로 이미지를 저장합니다.
cv2.imwrite("result.jpg", face)
실행 결과
다음 명령으로 실행하면 result.jpg가 생성됩니다.
python imgcut.py
잘 된 것 같습니다. 정말 말할 수 없는 표정을 하고 있네요.
감상·고찰
이번에는 OpenCV를 사용하여 이미지에서 얼굴만 잘라내는 방법을 썼습니다. 모델 학습 등 다양한 장면에서 사용할 수 있다고 생각합니다. OpenCV 대단하다고 생각했습니다.
Reference
이 문제에 관하여(파이썬에서 OpenCV를 사용하여 이미지에서 얼굴만 잘라내는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/happyfukumoto/items/a30db241affcf0af6243
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import cv2
haarcascade_frontalface_default.xml
img = cv2.imread("target.jpg")
face_pos = cascade.detectMultiScale(img)
for x,y,w,h in face_pos:
face = img[y:y+h, x:x+w]
cv2.imwrite("result.jpg", face)
다음 명령으로 실행하면 result.jpg가 생성됩니다.
python imgcut.py
잘 된 것 같습니다. 정말 말할 수 없는 표정을 하고 있네요.
감상·고찰
이번에는 OpenCV를 사용하여 이미지에서 얼굴만 잘라내는 방법을 썼습니다. 모델 학습 등 다양한 장면에서 사용할 수 있다고 생각합니다. OpenCV 대단하다고 생각했습니다.
Reference
이 문제에 관하여(파이썬에서 OpenCV를 사용하여 이미지에서 얼굴만 잘라내는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/happyfukumoto/items/a30db241affcf0af6243
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(파이썬에서 OpenCV를 사용하여 이미지에서 얼굴만 잘라내는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/happyfukumoto/items/a30db241affcf0af6243텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)