Wpis z mikrobloga

Czesc mircy i Mirabelki ;)
Dwa pytania z #programowanie i #python.
1. Mam rysunek w png z przezroczystoscia. Nie wiem czemu, w miejscach gdzie jest przezroczystosc (alfa = 0) pozostale skladowe wektora wynosza:1,2,3 czyli [1,2,3,0]
sam obrazek wczytalem poleceniem:
obraz=Image.open(adres).convert("RGBA")
i przekonwertowalem do tablicy:
tablica=np.array(obraz)

1. Chcialbym wszystkie pixele, które nie sa nieprzezroczysta biela [255,255,255,255] usunac, tj zrobic je przezroczystymi ([0,0,0,0])./ Jak najefektywniej to zrobic?
Bo przejscie iteracyjne po kazdym pixelu i sprawdzenie czy ktorakolwiek z wartosci jest mniejsza od 255 chyba do najefektywniejszych nie nalezy.
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Nie wiem czy szybsze, ale pewnie trochę bardziej czytelne będzie:

obraz = Image.open(adres).convert("RGBA")
tablica = np.array(obraz)
r, g, b, a = tablica.T
bialyfiltr = (r == 255) & (b == 255) & (g == 255) & (a == 255)
tablica[~bialy
filtr.T] = (0, 0, 0, 0)
  • Odpowiedz
@xavhowk: działa i to znacznie szybciej niz iteracja po elementach ;)
Ja znalazlem jeszcze cos takiego:

tylkoKolor=tablica[:,:,:3]
bialy=[255,255,255]
maska=np.all(tylkoKolor!=bialy, axis=-1)
tablica[maska]=(0,0,0,0) #tez dziala :)
  • Odpowiedz