Jak pracovat s grafikou v jazyce Python | robot_dreams Czech
should_authorize_via_email
email.input_code tel.input_code
 
email.code_actual_for tel.code_actual_for
apply_exit_text
session_ended
to_homepage
Jak pracovat s grafikou v jazyce Python

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

Více článků
Rozhovor s ředitelem data managementu v ČSOB.
Vše, co potřebuješ vědět, než začneš využívat tento nástroj