Hinzufügen Polsterung an Bilder gelangen Sie in die gleiche Form
l haben eine Reihe von Bildern von verschiedenen Größen (45,50,3), (69,34,3), (34,98,3)
. l hinzufügen möchten Polsterung, um diese Bilder wie folgt:
Nehmen Sie die maximale Breite und Länge des ganzen Bildern dann setzen Sie das Bild in dieser Größe
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)
Wie kann l-Polsterung in opencv, so dass alle Bilder die selbe Größe haben? Im Beispiel l gab die Bilder erhalten, die die Form des (69,98,3)
EDIT1:
Wollen wir annehmen, dass l ein Bild mit einer Form (49,39,3) l transformieren wollen (80,60,3) :
input_image dimension : {Breite=49, heigh=39}
also oben= Hoehe/2 = 19.5
unten = Höhe/2 = 19.5
Links=Breite/2=24.5
rechts=Breite/2=24.5
output_image dimension : {width=80,height=60}
top=30
unten=30
Links=40
rechts=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)
aber es soll (80,60,3)
EDIT2:
funktionierte es
constant= cv2.copyMakeBorder(img1,15,16,10,11,cv2.BORDER_CONSTANT,value=BLUE)
l schwarze und weiße Bilder, die Pixel sind entweder 0 oder 255 nur. die meisten meiner Figuren in Bildern sind in schwarzer Farbe geschrieben. So l müssen weiße pixel padding. Jedoch l haben auch einige Bilder, auf denen die Charaktere sind in weiß, also l müssen schwarze pixel padding. l ' Wanderschaft, wenn es gibt einen trick im open cv zu erkennen, dann fügen Sie weiße oder schwarze pixel padding
Was, wenn l cv2.resize(img, (69, 98), interpolation=cv2.INTER_NEAREST) , verändert Sie mein Bild. alle meine Bilder zentriert sind. die Zeichen sind geschrieben in der Mitte
für den zweiten Kommentar, ja, es wird ändern Sie Ihr Bild als das Aspekt-Verhältnis ändern würde.
InformationsquelleAutor vincent | 2017-04-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie verwenden:
wo SRK ist Ihre Quelle Bild-und top -, botto -, Links -, rechts-Polster rund um das Bild.
Können Sie max(Größen) - Größe des Bildes in einer while-Schleife hinzufügen, um die Polsterung zu jedem Bild.
die bordertype kann einer der folgenden sein:
copyMakeBorder tutorial
kann max(Größen) - Wert "Größe des Bildes"
Sie können fügen Sie nur die Werte nach Links oder oben, oder fügen Sie die Hälfte der Breite und Länge Werte für alle Richtungen. wie: oben = Länge/2, unten = Länge/2, Links = Breite/2, rechts = Breite/2
bitte siehe mein update. es hat nicht perfom correclty auf dimension
InformationsquelleAutor Azade Farshad
Wie ich sehe nicht eine akzeptierte Antwort, und auch die Tatsache, dass man, um zu bestimmen, oben, unten, Links, rechts von der Funktion, ich habe Balg, was für mich funktionierte problemlos. Entnommen aus: https://jdhao.github.io/2017/11/06/resize-image-to-square-with-padding/
InformationsquelleAutor George Sotiropoulos