Jak pracovat s grafikou v jazyce Python
Přehled knihovny Pillow
První řešení pro práci s grafikou v jazyce Python se objevila v roce 1990 – stejně jako jazyk samotný. V té době byla k dispozici pouze sada programů ImageMagick. Dnes má Python několik desítek knihoven podporujících zpracování grafiky. Pillow je oblíbenou volbou pro standardní zpracování obrázků.
Řekneme ti, co Pillow umí a jak se liší od ostatních Python balíčků.
Co dělají grafické Python knihovny
Aby bylo možné s obrázky pracovat, musí je počítač obvykle analyzovat – formátovat nebo extrahovat jejich vlastnosti.
Zpracování obrázků má společné úkoly: čtení, segmentace, transformace, škálování. Knihovny však mohou realizovat i složitější práci s grafickými soubory, například extrakci metadat, výpočet derivací, obnovu a rozpoznávání obrázků, jejich segmentaci a klasifikaci. Všechny z nich plní své úkoly.
Co je zvláštního v Pillow
Pillow je odnož knihovny PIL (Python Imaging Library). Ta přestala být aktualizována v roce 2009, a tak vznikl Pillow – nativní modul, který je z poloviny vytvořený v jazyce Python a z poloviny v jazyce C.
Pillow je multiplatformní knihovna. Pro její spuštění v systému Windows stačí použít systém pro správu balíčků pip. V systému iOS je třeba nejprve nastavit vývojové prostředí XCode a Homebrew, nástroj příkazového řádku pro macOS, který umožňuje instalaci aplikací.
Pillow čte v režimu čtení více než 40 obrazových formátů. Plně podporuje 21 formátů, včetně BMP, JPEG, GIF, TIFF, PNG a PSD. Další podrobnosti naleznete v dokumentaci aplikace Pillow.
Co umí knihovna
Hlavní funkce Pillow se nacházejí v modulu Image. Instanci této metody můžete vytvořit načtením obrázku, zpracováním jiných obrázků nebo jejich vytvořením. Pokud je soubor načten z disku pomocí funkce open, knihovna automaticky zjistí jeho formát.
Pillow má funkci zpožděného „líného“ načítání – při otevření obrázku není dekódován, což znamená, že obrázky se ze souboru načtou až při pokusu uživatele o jejich zpracování. Můžeš si prohlédnout vlastnosti souboru a zjistit, zda splňuje požadavky a zda s ním stojí za to pracovat. Teprve po zavolání funkce load se objeví požadované množství paměti RAM pro daný soubor.
Oříznutí obrázků je často prvním krokem při zpracování. V Pillow to lze provést dvěma způsoby:
- funkce crop, která určuje souřadnice levého horního a pravého dolního rohu, a příkaz resize;
- příkazy reduce a thumbnail – tato metoda zohledňuje poměr stran obrázku.
Když chceš překrýt jeden obrázek na druhý (například použít vodoznaky), vytvoříš nový obrázek překrytím vodoznaku na původní obrázek. Ve výchozím nastavení bude „vložený“ obrázek v levém horním rohu. Pokud chceš vytvořit průhledné pozadí, použij modul ImageDraw, který vyřezává tvary v obrázcích. Sytost barev tvaru lze upravit pomocí modulu ImageEnhance.
Všechny metody vylepšení v modulu mají společné rozhraní: hodnoty jasu, kontrastu a ostrosti se násobí požadovaným koeficientem. Obrázek lze zrcadlit pomocí funkce transpose a konstanty flip_left_right. Knihovna také umožňuje převádět obrázky do různých barevných režimů.
Konverze do OpenCV
Pillow dokáže automaticky zpracovat velké množství fotografií. Ve verzi Pillow-SIMD je obrázek s rozlišením 5184 × 3456 převeden na obrázek s rozlišením 320 pixelů za 0,79 sekundy. Pillow se často používá ke sjednocení fotografií a analýze jejich vlastností. Pro strojové vidění se používá jiná knihovna – OpenCV.
OpenCV nečte EXIF ani digitální profily, takže není možné předem zjistit formát obrázku. Jde o to, že OpenCV je nastaven na práci s ověřenými zdroji. Například fotoaparátem, který odesílá fotografie ve stejném formátu a rozlišení.
Obrázky z Pillow lze exportovat do NumPy a OpenCV je může zpracovat jako vlastní. A naopak.
Jaké úkoly řeší jiné grafické knihovny Pythonu
- Scikit-image
Jedná se o knihovnu s otevřeným zdrojovým kódem, která pracuje s poli NumPy. Mezi její funkce patří konverze barevného prostoru, vylepšení obrazu, třídicí filtr a grafické kreslící operace – sestavování grafů, histogramů, vytváření šablon. Scikit-image také umožňuje upravovat intenzitu obrazu.
- Matplotlib
Jedná se o balíček jazyka Python pro vizualizaci matematických operací – vytváření grafů, histogramů a grafů funkcí. Matplotlib také implementuje kreslení obrysů objektů a interaktivní značení, které umožňuje dělat poznámky na obrázcích. Skript si pamatuje kliknutí a ukládá je do seznamu.
- SciPy
Knihovna je postavena na NumPy a jejím hlavním účelem je provádět technické a vědecké výpočty. Můžeš ale pracovat i s obrázky – například vytvořit Gaussův šum. To je často počáteční fáze interpolace a výpočtu bodů zájmu. SciPy má také operace, které určují změnu intenzity obrazu.
- NumPy
Cennou vlastností knihovny NumPy je možnost reprezentovat obrázek jako číselné pole. Tato metoda se používá k vytváření vektorových reprezentací a obrazových matic. Kromě toho lze v rámci této knihovny snadno převádět obrázky na různé barevné stupně a redukovat šum v obrázcích.
NumPy se používá také ke zpracování datových sad v počítačovém vidění. Vzhledem k vysokému rozlišení obrázků v aplikacích počítačového vidění se často provádí redukce dimenzionality. V NumPy to lze provést pomocí metody analýzy hlavních komponent (PCA). Tímto způsobem lze uložit více informací o trénovacích datech s využitím menšího počtu dimenzí.
Autor: Oleksandr Tartachnyi