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