[PYTHON] Découpage avec OpenCV-Faire une vidéo voyante-

introduction

Cela ressemble à un titre de pêche.

Découpage avec OpenCV

Le type d'OpenCV est numpy.ndarray. Vous pouvez donc en retirer une partie avec Slice. Puisqu'il s'agit d'une matrice, l'ordre est ligne et colonne. Puisqu'il s'agit d'une matrice, spécifiez «de quelle ligne (colonne) à quelle ligne (colonne)». Il ne s'agit pas de "coordonnée supérieure gauche et taille de coupe". Le point est img [r1: r2, c1: c2], mais si vous comprenez la théorie, il est facile de mémoriser la notation ** img [r: r + h, c: c + w] **.

À propos, lorsque la coordonnée supérieure gauche est définie comme x, y =…, ce qui est plus approprié pour écrire la taille, h, w =… ou w, h =…? Arithmétique à l'école élémentaire [problème d'ordre de multiplication](https://ja.wikipedia.org/wiki/%E3%81%8B%E3%81%91%E7%AE%97%E3%81%AE%E9%A0 % 86% E5% BA% 8F% E5% 95% 8F% E9% A1% 8C) est devenu un sujet brûlant ces jours-ci, et il est possible que ce cas devienne un nouvel incendie dans la classe d'enseignement de la programmation obligatoire. y a-t-il.

Bien sûr, le rognage peut être fait avec PIL (Pillow), mais l'écriture des spécifications PIL sera déroutante, donc je n'y reviendrai pas ici.

Programme de base

trim.py


import cv2

filename = "nurse.jpg "
img = cv2.imread(filename)

x, y = 380, 30
h, w = 160, 120
img_trim = img[y:y+h, x:x+w]

cv2.imshow("origin", img)
cv2.imshow("trim", img_trim)
cv2.imwrite("trimmed_image.jpg ", img_trim)

cv2.waitKey(0)
cv2.destroyAllWindows()

À partir de l'image d'origine (Skimanas) bakudan.jpg Nous avons pu extraire une zone de hauteur 160 x largeur 120 à partir de (x, y) = (380,30). trim.jpg Bien sûr, si vous incluez la reconnaissance faciale, vous n'avez pas à modifier manuellement la position et la taille.

Enregistrer l'image avec OpenCV cv2.imwrite ()

Utilisez cv2.imwrite (* filename *, * mat *).

Exemple d'application

Cela seul n'est pas intéressant, j'ai donc écrit un programme qui change la position de rognage tout en tournant la boucle.

peep.py


import cv2
from PIL import Image

filename = "nurse.jpg "
img = cv2.imread(filename)
imgH, imgW = img.shape[:2]

#Comme tu veux
x, y = 50, 100
dx,dy = 2, 3
h, w = 160, 160

imgs=[]
while True:
    if 0 <= x+dx <= imgW-w : #Vous pouvez écrire comme ça.
        x = x+dx
    else:
        dx = -dx

    if 0 <= y+dy <= imgH-h :
        y = y+dy
    else:
        dy = -dy

    window = img[y:y+h, x:x+w]
    cv2.imshow("", window)

#Voyez par vous-même ce qui se passe lorsque vous activez cette phrase!
#    cv2.moveWindow("", x+100, y+100)

    imgPIL=Image.fromarray(window[:,:,::-1])
    imgs.append(imgPIL)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cv2.destroyAllWindows()
imgs[0].save("peep.gif", save_all=True,
             append_images=imgs[1:], optimize=False,
             duration=20, loop=0)

Ce programme crée un tel GIF animé. peep.gif

J'avais l'habitude de lire ce genre de jeu dans Bemaga quand je l'appelais un judas, mais je n'ai jamais vu ce mot utilisé.

À la fin

Quand j'ai touché Excel pour la première fois, j'ai vu le format R1C1 et j'ai dit: "R et C, qui est la ligne et qui est la colonne!" "Je comprends que R est la ligne et C est la colonne, mais j'écris les coordonnées xy comme x, y. Si la ligne est RC, l'alignement est inversé! »Se souvient avoir été indigné. Je ne pensais pas que je sortirais à nouveau avec ce malaise.

Recommended Posts

Découpage avec OpenCV-Faire une vidéo voyante-
Créer un lecteur vidéo avec PySimpleGUI + OpenCV
Format A4 avec python-pptx
Décorer avec un décorateur
Créez un outil d'analyse vidéo simple avec python wxpython + openCV
Couper la vidéo mp4 avec python-ffmpeg
Apprenez librosa avec un tutoriel 1
Dessinez un graphique avec NetworkX
Essayez de programmer avec un shell!
Gestion de vidéos YouTube avec Python 3
Créer une page d'accueil avec django
Chargement de la vidéo en boucle avec opencv
Recevez des vidéos en streaming avec Tello
Utiliser une imprimante avec Debian 10
Faites une loterie avec Python
Créer un répertoire avec python
Un peu coincé dans le chainer
Dessinez un graphique avec networkx
Faire un feu avec kdeplot
Créer un lecteur vidéo avec PySimpleGUI + OpenCV 3 Ajout de la fonction de masque