Ajoutez un faux effet d'inclinaison aux vidéos avec OpenCV + Python

La source est https://github.com/osoken/tiltshift_effector

Un script Python qui applique un faux effet d'inclinaison à un fichier vidéo tel que .mov. J'ai utilisé «Numpy», «Scipy», «OpenCV», «Pillow». Pour Python 2.7.

Le principe est simple, il suffit de combiner l'image d'origine et l'image floue tout en la masquant. original orig.png

masque mask.png

Image floue blur.png

Après synthèse out.png

Une fonction qui génère un masque.

def gen_mask(sz, t, tc, c, bc):
  bounds = (0,limit_value(int(sz[1]*t),0,sz[1]),limit_value(int(sz[1]*(t+tc)),0,sz[1]),limit_value(int(sz[1]*(t+tc+c)),0,sz[1]),limit_value(int(sz[1]*(t+tc+c+bc)),0,sz[1]),sz[1]);
  mask = np.array(Image.new('L', sz));
  mask[bounds[0]:bounds[1],:] = 255;
  for i in range(bounds[1],bounds[2]):
    mask[i,:] = 255 - int(255.0/float( bounds[2] - bounds[1] ) * float(i - bounds[1]));
  mask[bounds[3]:bounds[2],:] = 0;
  for i in range(bounds[3],bounds[4]):
    mask[i,:] = int(255.0/float( bounds[4] - bounds[3] ) * float(i - bounds[3]));
  mask[bounds[4]:bounds[5],:] = 255;
  mask = Image.fromarray(mask);
  return mask;

sz est un taple de (largeur, hauteur). «t», «tc», «c», «bc» sont des nombres de «0,0» à «1,0», «t» est la zone blanche supérieure, «c» est la zone noire du milieu, «tc» est » Entre t »et« c »,« bc »exprime la largeur du gradient entre« c »et la zone blanche ci-dessous, le rapport global étant« 1,0 ».

J'ai utilisé le gaussian_filter dans scipy pour générer l'image floue.

def gen_blurred_image(image, blur_factor):
  if blur_factor == 0:
    return image;
  im = np.array(image);
  return Image.fromarray(ndimage.gaussian_filter(im, sigma=[blur_factor, blur_factor, 0]));

Il est inutile de convertir la variable ʻimage au type numpy.arrayet de la renvoyer immédiatement au typePIL type ʻImage juste pour le filtrage, mais en tenant compte d'autres opérations Ça ressemble à ça ... blur_factor est la force du flou, donnée sous forme de fraction flottante.

Après avoir généré le masque et l'image floue, combinez-les avec la fonction «coller» de «PIL».

def paste_image(base, layer, mask):
  im = base;
  im.paste(layer, mask = mask);
  return im;

Une fois que vous êtes prêt, tout ce que vous avez à faire est d'ouvrir la vidéo et d'appliquer le même traitement à chaque image.

  cap = cv2.VideoCapture('input.mov');
  orig_size = (int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)),int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)));
  out = cv2.VideoWriter('output.mov', cv2.cv.CV_FOURCC('m','p','4','v'), int(cap.get(cv2.cv.CV_CAP_PROP_FPS)), orig_size);
  mask = gen_mask(orig_size, 0.4, 0.15, 0.05, 0.1);
  while cap.isOpened():
    ret,im_orig = cap.read();
    if ret == True:
      im = Image.fromarray(im_orig);
      im_blur = gen_blurred_image(im, 2.0);
      im = np.array(paste_image(im, im_blur, mask));
      cv2.imshow('view', im);
      out.write(im);
      key = cv2.waitKey(1);
      if key == 27:
        break;
    else:
      break;

  out.release();
  cap.release();
  cv2.destroyAllWindows();

La version du référentiel gère les options d'entrée, etc., donc le nombre de lignes est grand, mais en substance, c'est comme ça. J'ajuste également la qualité et la saturation de l'image. La dernière clé == 27 de la boucle se termine prématurément par ʻesc`.

Recommended Posts

Ajoutez un faux effet d'inclinaison aux vidéos avec OpenCV + Python
Convertir une vidéo en noir et blanc avec ffmpeg + python + opencv
Enregistrer la vidéo image par image avec Python OpenCV
Ajouter du bruit gaussien aux images avec python2.7
Comment recadrer une image avec Python + OpenCV
Le moyen le plus simple d'utiliser OpenCV avec python
[Python] Comment gérer les caractères japonais avec openCV
Essayez de détecter les poissons avec python + OpenCV2.4 (inachevé)
Binarisation avec OpenCV / Python
Introduction à OpenCV (python) - (2)
Comment ajouter de l'aide à HDA (avec bonus de script Python)
Comment boucler et lire une vidéo gif avec openCV
Afficher l'image de la caméra USB avec OpenCV de Python avec Raspeye
Connectez-vous à BigQuery avec Python
"Traitement Apple" avec OpenCV3 + Python3
Édition d'image avec python OpenCV
Capture de caméra avec Python + OpenCV
Connectez-vous à Wikipedia avec Python
Gestion de vidéos YouTube avec Python 3
Publiez sur Slack avec Python 3
[Python] Utilisation d'OpenCV avec Python (basique)
Chargement de la vidéo en boucle avec opencv
Créez un outil d'analyse vidéo simple avec python wxpython + openCV
Détection de visage avec Python + OpenCV
Basculer python vers 2.7 avec des alternatives
Écrire en csv avec Python
Découpez une image d'une vidéo toutes les secondes avec Python + OpenCV
Utiliser OpenCV avec Python @Mac
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
J'ai essayé d'afficher le temps de lecture de la vidéo (OpenCV: version Python)
Le moyen le plus rapide d'obtenir régulièrement des images de caméra avec opencv de python
[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
Briller la vie avec Python et OpenCV
Python: comment utiliser async avec
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Ajouter des champs à des entités avec ArcPy
[Python] Ecrire dans un fichier csv avec Python
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
Ravi de vous rencontrer avec python
Essayez d'exploiter Facebook avec Python
[Python] Utilisation d'OpenCV avec Python (détection des bords)
Sortie vers un fichier csv avec Python
Python 2.7 Ajout de la documentation japonaise à Dash.app
Convertir la liste en DataFrame avec python
Conversion MP3 → WAV avec Python
Pour faire une récursion avec Python2
Comment démarrer avec Python
Programmation facile Python + OpenCV avec Canopy
Que faire avec la sortie de PYTHON?
Essayez la reconnaissance faciale avec python + OpenCV
Découpez le visage avec Python + OpenCV
Reconnaissance faciale avec caméra avec opencv3 + python2.7
Charger une image gif avec Python + OpenCV
Comment calculer la date avec python
Trouver la similitude d'image avec Python + OpenCV
Utiliser OpenCV avec Python 3 dans Window
Publiez facilement sur Twitter avec Python 3