/ / Jak sprawić, aby png z przezroczystością było przezroczyste w MatLab? - obraz, matlab, png, przezroczysty, alfa

Jak zrobić png z przezroczystością wydają się przezroczyste w MatLab? - obraz, matlab, png, przezroczysty, alfa

Mam obraz z przezroczystym tłem,ale kiedy otwieram go w MATLAB, dostaję czarne tło. „Nakładam ją na obraz tła. Jak mogę to wyświetlić? Próbowałem użyć funkcji alfa alpha(image,0) ale ustawia cały mój obraz na 0. Czy mogę ustawić wartość alfa pojedynczych pikseli na 0? W ten sposób mogę uruchomić każdy piksel przez pętlę.

Nie jestem pewien, czy to pomaga, ale kiedy biegnę imfinfo("ryu1.png"), Dostaję :

...
Transparency = "alpha"
SimpleTransparencyData = []
...

Odpowiedzi:

7 dla odpowiedzi № 1

Możesz przeczytać na swoim obrazie za pomocą imread. Musisz jednak określić dodatkowe parametry wyjściowe, jeśli chcesz pobrać kanał alfa. Musisz to nazwać tak:

[im, map, alpha] = imread("ryu1.png");

im czy twój obraz jest wczytany, map to mapa kolorów, którą zignorujemy, ale alpha zawiera żądane informacje o przezroczystości. Pierwsze połączenie imshow i zapisz uchwyt do obrazu, a następnie ustaw przezroczystość za pomocą alpha kanał za pomocą set dowództwo. Innymi słowy:

[im, map, alpha] = imread("ryu1.png");
f = imshow(im);
set(f, "AlphaData", alpha);

To powinno sprawić, że postać będzie przezroczysta.


Załóżmy, że masz już obraz tłazaładowany do MATLAB. Jeśli chcesz połączyć te dwa elementy, musisz zrobić matę alfa. Używasz kanału alfa i miksujesz oba. Innymi słowy, jeśli twój obraz tła jest przechowywany w img_background i img_overlay to obraz, który chcesz umieścić na górze tła, zrób to:

alphaMask = im2double(alpha); %// To make between 0 and 1
img_composite = im2uint8(double(img_background).*(1-alphaMask) + double(img_overlay).*alphaMask);

Pierwszy krok jest konieczny, ponieważ załadowana mapa alfa będzie tego samego typu co obraz wejściowy, który zwykle jest uint8. Musimy przekonwertować to na double obraz taki, że przechodzi pomiędzy 0 i 1, i im2double jest idealny do tego. Druga linia konwertuje każdy obraz na podwójną precyzję, abyśmy mogli obliczyć tę sumę i aby typy danych między maską alfa i obydwoma obrazami były zgodne. Następnie wracamy do uint8. Następnie możesz pokazać ten końcowy obraz za pomocą imshow.