Ajouter des bordures à une image en utilisant python
J'ai un grand nombre d'images de taille fixe (disons 500*500). Je veux écrire un script python qui permettra de les redimensionner à une taille fixe (disons 800*800), mais la volonté de conserver l'original de l'image au centre et remplir l'excédent avec une couleur fixe (dire noir).
Je suis à l'aide de PIL. Je peux redimensionner l'image à l'aide de la resize
fonction, mais qui modifie le ratio d'aspect. Est-il possible de faire cela?
source d'informationauteur Nihar Sarangi
Vous devez vous connecter pour publier un commentaire.
Vous pouvez créer une nouvelle image avec les nouvelles dimensions, et coller l'image ancienne dans le centre, puis de le sauvegarder. Si vous le souhaitez, vous pouvez remplacer l'image d'origine (êtes-vous sûr? ;o)
Oui, il est.
Faire quelque chose comme ceci:
Vous pouvez écrire la même chose à plusieurs lignes:
Et vous dire que vous avez une liste d'images. Ensuite, vous devez utiliser un cycle de processus:
Alternativement, si vous utilisez OpenCVils ont une fonction appelée
copyMakeBorder
qui vous permet d'ajouter rembourrage à l'un des côtés de l'image. Au-delà de couleurs solides, ils ont aussi eu quelques options intéressantes pour la fantaisie frontières comme reflétant ou à l'extension de l'image.Sources: OpenCV frontière tutoriel et
OpenCV 3.1.0 Docs pour copyMakeBorder
Il est important de considérer vieux dimension nouvelle dimension et de leur différence. Si la différence est bizarre (même pas), vous aurez besoin de spécifier des valeurs légèrement différentes pour gauche, haut, droite et bas frontières.
Assumer l'ancienne dimension est de ux,oh, et le nouveau est nw,nh.
Donc, ce serait la réponse:
PIL est
crop
méthode peut effectivement gérer cela pour vous en utilisant les nombres qui sont à l'extérieur de la boîte englobante de l'image d'origine, si ce n'est pas explicitement mentionné dans la documentation. Les nombres négatifs pour la gauche et en haut ajouter des pixels noirs de ces bords, tandis que les nombres plus grand que l'original de la largeur et de la hauteur de la droite et en bas permettra d'ajouter des pixels noirs de ces bords.Ce code de comptes pour les tailles de pixel:
Au lieu de 4-tuple, vous pouvez à la place utiliser un 2-tuple pour ajouter le même nombre de pixels sur la gauche/droite et haut/bas, ou 1-n-uplet d'ajouter le même nombre de pixels de tous les côtés.
Vous permet de charger une image avec
scipy.misc.imread
comme un tableau numpy. Ensuite, créer un tableau avec l'arrière-plan avecnumpy.zeros((hauteur, largeur, canaux))
et coller l'image à l'endroit désiré: