Je vais vous expliquer comment recadrer une image en utilisant OpenCV. Ceci est une continuation de la précédente, donc si vous avez des questions dans cet article, veuillez jeter un œil.
MacOS Mojave Python 3.7
Utilisez l'image ci-dessous (neko.jpg).
Vous pouvez vérifier la taille de l'image avec le code suivant.
python
#Charger la bibliothèque
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("neko.jpg ")
print(img.shape)
Lorsque j'exécute le code ci-dessus, j'obtiens les résultats suivants:
(900, 1600, 3)
Cela signifie 900 pixels verticalement, 1600 pixels horizontalement et 3 canaux. Dans le cas d'une image couleur, le nombre de canaux est de 3 car il s'agit de GBR. Dans le cas de l'échelle de gris, le nombre de canaux est de 1 car il ne s'agit que du degré de blancheur.
Dans Opencv, les axes de coordonnées de l'image sont les suivants.
Lorsque la position est (x, y), l'origine (0,0) est en haut à gauche comme indiqué sur la figure. Lorsque vous traitez avec des images, veuillez noter que la direction descendante est la direction positive de l'axe y. La taille de cette image est de 900 pixels verticalement et de 1600 pixels horizontalement, de sorte que les coordonnées x et y des pixels de fin de l'image sont respectivement 899 et 1599. La raison pour laquelle il ne devient pas 900 ou 1600 est qu'il compte à partir de l'origine 0.
Si vous spécifiez les coordonnées de l'image comme suit, vous pouvez obtenir la valeur de couleur de cette position.
python
img = cv2.imread("neko.jpg ")
print(img[450,800])
production
[153 161 190]
Cela indique que la couleur à la position à la coordonnée (450.800) est (R, V, B) = (153.161.190). En outre, vous pouvez spécifier plusieurs coordonnées en procédant comme suit.
print(img[450:650,800:1000])
[[[153 161 190]
[153 161 190]
[152 160 189]
...
[169 178 205]
[169 178 205]
[169 178 205]]
[[152 160 189]
[152 160 189]
[153 161 190]
...
[169 178 205]
[169 178 205]
[169 178 205]]
[[151 159 188]
[152 160 189]
[154 162 191]
...
[171 178 205]
[172 179 206]
[172 179 206]]
...
Omis ci-dessous. .. ..
Considérez le ":" dans [] comme le même que le "~" que nous utilisons habituellement pour représenter une plage de nombres. Dans l'exemple ci-dessus, les informations de couleur comprises entre les coordonnées (450 800) et (649 999) sont émises.
Si vous placez la plage spécifiée de l'image dans un autre objet, vous pouvez obtenir l'image avec la position découpée.
python
#Charger la bibliothèque
import cv2
import matplotlib.pyplot as plt
img = cv2.imread("neko.jpg ")
#Img le pixel spécifié_Substitut pour garniture
img_trim = img[450:650,800:1000]
#Changer de couleur
img_trim = cv2.cvtColor(img_trim, cv2.COLOR_BGR2RGB)
#afficher
plt.imshow(img_trim)
plt.show()
Si l'image ci-dessus est sortie, c'est réussi! (Puisqu'il s'agit d'un tatami, il est difficile de dire s'il est découpé ... lol) La prochaine fois, j'aimerais expliquer le travail de pétrissage, comme la mise à l'échelle et l'inversion de l'image: blush:
Si vous souhaitez faire diverses choses telles que des informations sur de futurs articles et des questions et réponses, veuillez me suivre ...! : soulagé: https://twitter.com/ryuji33722052