pbj0812의 코딩 일기

[PYTHON] OpenCV를 활용한 나만의 기생충 포스터 만들기 본문

ComputerLanguage_Program/PYTHON

[PYTHON] OpenCV를 활용한 나만의 기생충 포스터 만들기

pbj0812 2020. 2. 15. 14:27

0. 목표

 - 아래와 같이 눈을 가리는 형태의 결과물 제작

 - 지난 포스팅(민아 누나 안경 씌우기) 의 경우에는 인물이 하나였기에 눈을 가지고 인식이 가능하나 인물이 여러명일 경우에는 인물 개인을 산정하는데 어려움이 발생(눈 한쪽만 인식하거나, 눈의 주인을 분간하는 것에 대한 어려움 발생)

1. 준비물

 1) 사진

 2) OpenCV 설치

pip install opencv-python

2. 코드

 1) libray 호출

import cv2

 2) 이미지 파일 및 cascade.xml 호출

  - xml 소스 위치(링크)

imgfile = 'C:/Users/user/jupyter_works/opencv_python/parasite/source/para2.jpg'
cascade_file = "C:/Users/user/jupyter_works/opencv_python/xml/haarcascade_frontface.xml"

image = cv2.imread(imgfile)
cascade = cv2.CascadeClassifier(cascade_file)

 3) 얼굴 인식

  - 다른 물체를 얼굴로 인식하는 경우도 있기에 미세한 수치 조정 필요

face_list = cascade.detectMultiScale(image, scaleFactor=1.1, minNeighbors=1, minSize=(50, 50), maxSize = (60, 60))

 4) 얼굴 표시

if len(face_list) > 0:  
  color = (0, 0, 255)
  for face in face_list:
    x, y, w, h = face
    # 사각형 그리기
    cv2.rectangle(image,(x,y),(x+w,y+h),color,2)
  cv2.imwrite("C:/Users/user/jupyter_works/opencv_python/parasite/source/result.jpg", image)

else:
  print("none") 

 - 실행결과

 5) 눈 알고리즘 구상

  - 이상적인 미인형 얼굴은 이마로부터 1:1:0.8 이라고 함

  - 하지만, 우리는 미인이 아니기에 러프하게 잡도록 함

 6) 코드 개선

  (1) 알고리즘 개선(int로 만들어 에러 차단)

  (2) color를 0, 0, 0 으로 만들어 검은색으로 변경

  (3) 선굵기를 2에서 -1로 변경하여 채우도록 설정   

if len(face_list) > 0:    
  color = (0, 0, 0)
  for face in face_list:
    x, y, w, h = face
    # 사각형 그리기
    cv2.rectangle(image,(x,y+int(h/28*10)),(x+w,y+int(h/28*14)),color,-1)
  cv2.imwrite("C:/Users/user/jupyter_works/opencv_python/parasite/source/result2.jpg", image)

else:
  print("none") 

3. 결과

4. 참고문헌

 - OpenCV rectangle 관련

 

Comments