Ich habe ein Bild in Matlab importiert und bevor ich es anzeigen, wie würde ich den Hintergrund des Bildes transparent machen? Zum Beispiel habe ich einen roten Ball auf einem weißen Hintergrund, wie würde ich die weißen Pixel des Bildes tranparent machen, so dass nur der rote Ball sichtbar ist und die weißen Pixel transparent sind?Machen Sie ein Pixel transparent in Matlab
Antwort
Sie müssen sicherstellen, dass das Bild im 'PNG'-Format gespeichert ist. Dann können Sie die 'Alpha' parameter einer PNG-Datei verwenden, die eine Matrix ist, die die Transparenz jedes einzelnen Pixels angibt. Es ist im Wesentlichen eine boolesche Matrix, die 1 ist, wenn das Pixel transparent ist, und 0, falls nicht. Dies kann leicht mit einer for-Schleife erfolgen, solange die Farbe, die transparent sein soll, immer den gleichen Wert hat (d. H. 255 für uint8). Wenn es nicht immer derselbe Wert ist, könnten Sie einen Schwellenwert oder einen Bereich von Werten definieren, wo dieses Pixel transparent wäre.
Update:
zuerst die alpha-Matrix erzeugt durch Iterieren durch das Bild und (vorausgesetzt, sie setzt wissen transparent zu sein), wenn das Pixel weiß ist, die alpha-Matrix an diesem Pixel als 1.
# X is your image
[M,N] = size(X);
# Assign A as zero
A = zeros(M,N);
# Iterate through X, to assign A
for i=1:M
for j=1:N
if(X(i,j) == 255) # Assuming uint8, 255 would be white
A(i,j) = 1; # Assign 1 to transparent color(white)
end
end
end
verwenden dann diese neu erzeugten alpha-Matrix (A), um das Bild als ein ".png"
imwrite(X,'your_image.png','Alpha',A);
zu speichern Hinweis für Schleifen in MATLAB sollte um jeden Preis vermieden werden, weil sie langsam sind. Das Umschreiben von Code zum Entfernen der Schleifen wird üblicherweise als "vektorisierender" Code bezeichnet. Im Fall der Antwort von ademing2 könnte dies folgendermaßen geschehen:
A = zeros(size(X));
A(X == 255) = 1;
Danke @ ademing2. Hast du ein kurzes Beispiel? – omegaFlame
Ich habe meine ursprüngliche Antwort mit einem Beispiel bearbeitet. –
Danke. Aber die Bildausgabe ist nur 1x1 und 87 Bytes. Irgendwelche Ideen? – omegaFlame