Cela ressemble à un titre de pêche.
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.
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) Nous avons pu extraire une zone de hauteur 160 x largeur 120 à partir de (x, y) = (380,30). Bien sûr, si vous incluez la reconnaissance faciale, vous n'avez pas à modifier manuellement la position et la taille.
Utilisez cv2.imwrite (* filename *, * mat *).
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é.
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é.
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