Créer diverses vidéos Photoshop avec Python + OpenCV ② Créer une image fixe Photoshop
Python2.7
brew install python
if [ -d $(brew --prefix)/lib/python2.7/site-packages ];then
  export PYTHONPATH=$(brew --prefix)/lib/python2.7/site-packages:$PYTHONPAT
fi
OpenCV2
brew install opencv
Numpy
pip install numpy
J'utilise l'appareil photo fourni avec mon MacBook.
Faites-les préparer à la boulangerie.
Je n'ai pas fait beaucoup, donc je n'ai pas ajouté beaucoup de commentaires.
webcam.py
#! -*- coding: utf-8 -*-
import cv2
import numpy as np
from PIL import Image
def facedetect(face_cascade, cap, image):
    cnt = 0
    while(True):
        ret, frame = cap.read()
        if ret == False:
            break
        else:
            if (cnt % 10) == 0:
                gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
                facerect = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
            cnt += 1
            if len(facerect) > 0:
                for rect in facerect:
                    x = rect[0]
                    y = rect[1]
                    w = rect[2]
                    h = rect[3]
                    #Un ajustement peut être nécessaire en fonction de la forme du visage
                    x = x - w / 2
                    y = y - h / 1.8
                    w = w * 1.7
                    h = h * 1.7
                    x = int(round(x))
                    y = int(round(y))
                    w = int(round(w))
                    h = int(round(h))
                    #Redimensionnez l'image à composer pour l'adapter au rectangle.
                    image = cv2.resize(image, (w, h))
                    #Combinaison d'images avec le visage de la caméra.
                    frame = overlay(frame, image, x, y)
                    #Utilisez cette option si vous souhaitez effectuer un traitement de mosaïque.
                    # dst = frame[y:y+h, x:x+w]
                    # blur = cv2.blur(dst, (50, 50))
                    # frame[y:y+h, x:x+w] = blur
        cv2.imshow('fram', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
def overlay(frame, image, x, y):
    height, width = image.shape[:2]
    layer1 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    layer2 = cv2.cvtColor(image, cv2.COLOR_BGRA2RGBA)
    layer1 = Image.fromarray(layer1)
    layer2 = Image.fromarray(layer2)
    layer1 = layer1.convert('RGBA')
    layer2 = layer2.convert('RGBA')
    tmp = Image.new('RGBA', layer1.size, (255, 255, 255, 0))
    tmp.paste(layer2, (x, y), layer2)
    result = Image.alpha_composite(layer1, tmp)
    return cv2.cvtColor(np.asarray(result), cv2.COLOR_RGBA2BGRA)
if __name__ == '__main__':
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
    image = cv2.imread('anpan.png', cv2.IMREAD_UNCHANGED)
    cap = cv2.VideoCapture(0)
    cap.set(3, 640)
    cap.set(4, 480)
    facedetect(face_cascade, cap, image)
――Il était utile d'avoir des informations inattendues.
Recommended Posts