Es sieht aus wie ein Angeltitel.
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.
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) Aus (x, y) = (380,30) konnten wir einen Bereich mit einer Höhe von 160 x Breite 120 extrahieren. Wenn Sie die Gesichtserkennung einbeziehen, müssen Sie die Position und Größe natürlich nicht manuell ändern.
Verwenden Sie cv2.imwrite (* Dateiname *, * Mat *).
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.
Ich habe diese Art von Spiel in Bemaga gelesen, als ich es ein Guckloch nannte, aber ich habe dieses Wort nie benutzt gesehen.
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