[PYTHON] Trimmen mit OpenCV-Erstellen eines Peeping-Videos

Einführung

Es sieht aus wie ein Angeltitel.

Trimmen mit OpenCV

Der OpenCV-Typ ist numpy.ndarray. Sie können also einen Teil davon mit Slice herausnehmen. Da es sich um eine Matrix handelt, ist die Reihenfolge Zeile und Spalte. Da es sich um eine Matrix handelt, geben Sie "von welcher Zeile (Spalte) zu welcher Zeile (Spalte)" an. Es ist nicht "obere linke Koordinate und Schnittgröße". Der Punkt ist img [r1: r2, c1: c2], aber wenn Sie die Theorie verstehen, ist es leicht, sich die Notation ** img [r: r + h, c: c + w] ** zu merken.

Übrigens, wenn die obere linke Koordinate als x definiert ist, y =…, was ist besser geeignet, um die Größe zu schreiben, h, w =… oder w, h =…? Grundschularithmetik [Problem der Multiplikationsreihenfolge](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) ist heutzutage ein heißes Thema geworden, und es besteht die Möglichkeit, dass dieser Fall in der obligatorischen Programmierschulklasse zu einem neuen Brand wird. Gibt es.

Natürlich kann das Trimmen mit PIL (Pillow) durchgeführt werden, aber das Schreiben der PIL-Spezifikationen ist verwirrend, daher werde ich hier nicht darauf eingehen.

Grundprogramm

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()

Aus dem Originalbild (Skimaners) bakudan.jpg Aus (x, y) = (380,30) konnten wir einen Bereich mit einer Höhe von 160 x Breite 120 extrahieren. trim.jpg Wenn Sie die Gesichtserkennung einbeziehen, müssen Sie die Position und Größe natürlich nicht manuell ändern.

Bild mit OpenCV speichern cv2.imwrite ()

Verwenden Sie cv2.imwrite (* Dateiname *, * Mat *).

Anwendungsbeispiel

Das allein ist nicht interessant, deshalb habe ich ein Programm geschrieben, das die Trimmposition beim Drehen der Schleife ändert.

peep.py


import cv2
from PIL import Image

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

#Wie du willst
x, y = 50, 100
dx,dy = 2, 3
h, w = 160, 160

imgs=[]
while True:
    if 0 <= x+dx <= imgW-w : #Sie können so schreiben.
        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)

#Überzeugen Sie sich selbst, was passiert, wenn Sie diesen Satz aktivieren!
#    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)

Dieses Programm erstellt ein solches animiertes GIF. peep.gif

Ich habe diese Art von Spiel in Bemaga gelesen, als ich es ein Guckloch nannte, aber ich habe dieses Wort nie benutzt gesehen.

Am Ende

Als ich Excel zum ersten Mal berührte, sah ich das R1C1-Format und sagte: „R und C, das ist die Zeile und das ist die Spalte!“ „Ich verstehe, dass R die Zeile und C die Spalte ist, aber ich schreibe die xy-Koordinaten als x, y. Wenn die Linie RC ist, ist die Linie umgekehrt! “Erinnert sich, empört zu sein. Ich hätte nicht gedacht, dass ich wieder mit diesem Unbehagen ausgehen würde.

Recommended Posts

Trimmen mit OpenCV-Erstellen eines Peeping-Videos
Erstellen Sie einen Videoplayer mit PySimpleGUI + OpenCV
A4 Größe mit Python-Pptx
Mit Dekorateur dekorieren
Erstellen Sie mit python wxpython + openCV ein einfaches Videoanalysetool
Schneiden Sie mp4-Videos mit python-ffmpeg
Lernen Sie Librosa mit einem Tutorial 1
Zeichnen Sie mit NetworkX ein Diagramm
Versuchen Sie, mit einer Shell zu programmieren!
YouTube-Videoverwaltung mit Python 3
Erstellen Sie eine Homepage mit Django
Loop-Video-Laden mit opencv
Erhalten Sie Video-Streaming mit Tello
Verwenden eines Druckers mit Debian 10
Machen Sie eine Lotterie mit Python
Erstellen Sie ein Verzeichnis mit Python
Ein bisschen im Kettenschiff stecken
Zeichnen Sie mit networkx ein Diagramm
Machen Sie ein Feuer mit kdeplot
Erstellen Sie einen Videoplayer mit PySimpleGUI + OpenCV 3 Hinzufügen einer Maskenfunktion