Ajouter rembourrage sur les images pour les mettre dans la même forme
l ont un ensemble d'images de tailles différentes (45,50,3), (69,34,3), (34,98,3)
. l'souhaitez ajouter un rembourrage pour ces images comme suit:
Prendre le max de la largeur et de la longueur de l'ensemble des images, puis placer l'image dans la taille que
import os
import glob
import cv2
input_path="/home/images"
os.chdir(indput_path)
images=glob.glob("*.png")
Length=[]
Width=[]
for img in images:
img=cv2.imread(img)
width,length=img.shape[0:2]
Length.append(length)
Width.append(width)
W=max(Width)
L=max(Length)
Comment pouvez l ajouter rembourrage dans opencv, de sorte que toutes les images ont la même taille? Dans l'exemple l a donné les images d'obtenir la forme de (69,98,3)
EDIT1:
Supposons que l ont une image avec une forme (49,39,3) que l'on veut transformer (80,60,3) :
input_image dimension : {largeur=49, hauteur=39}
top= hauteur/2 = 19.5
bas = hauteur/2 = 19.5
Gauche=largeur/2=24.5
droite=largeur/2=24.5
output_image dimension : {largeur=80,hauteur=60}
top=30
bas=30
gauche=40
droite=40
import cv2
import numpy as np
from matplotlib import pyplot as plt
BLUE = [255,255,255]
img1 = cv2.imread('/image.png')
constant=cv2.copyMakeBorder(img1,30,30,40,40,cv2.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
plt.subplot(233),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()
print(constant.shape)
(109, 119, 3)
cependant, il est censé être (80,60,3)
EDIT2:
il a travaillé
constant= cv2.copyMakeBorder(img1,15,16,10,11,cv2.BORDER_CONSTANT,value=BLUE)
- suivez ce lien: stackoverflow.com/questions/36044061/...
- l avez des images en noir et blanc les pixels sont 0 ou 255. la plupart de mes personnages dans les images sont écrits en noir. Donc l besoin pixel blanc rembourrage. Cependant l ont aussi quelques images où les personnages sont en blanc pour l besoin pixel noir rembourrage. l suis demander si il y a un truc en open cv à détecter puis ajouter le blanc ou le noir pixel rembourrage
- Que faire si l utilisation cv2.redimensionner(img, (69, 98), l'interpolation=cv2.INTER_NEAREST) , à modifier mon image. toutes mes images sont centrées. les caractères sont écrits dans le centre
- pour le deuxième commentaire, oui il va changer votre image lorsque le rapport d'aspect allait changer.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser:
où src est votre source d'image et en haut, botto, à gauche, à droite, sont les rembourrages autour de l'image.
Vous pouvez utiliser max(tailles) - valeur de la taille de l'image dans une boucle while pour ajouter du rembourrage pour chaque image.
le bordertype peut être l'un de ces:
copyMakeBorder tutoriel
Que je ne vois pas accepté de répondre, et aussi le fait que l'on a à déterminer la haut, bas, gauche, droit de la fonction, j'ai soufflet en ce qui a fonctionné pour moi facilement. Tiré de: https://jdhao.github.io/2017/11/06/resize-image-to-square-with-padding/
im = cv2.resize(im, (new_size[1], new_size[0]))
vous devrez changer de l'un des new_size avec old_size. La première est de garder une hauteur constante et la deuxième de largeurComme ceci (Rembourrage est appelé frontières sur openCV):
Et bleu peut devenir blanc même
source:
https://docs.opencv.org/3.4/da/d0c/tutorial_bounding_rects_circles.html