Jak pracovat s grafikou v 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 Python

Jak pracovat s grafikou v Python

Přehled knihovny Pillow.

První grafická řešení jazyka Python se objevila v roce 1990 – stejně jako jazyk samotný. Zpočátku byla k dispozici pouze sada programů ImageMagick, ale nyní má Python několik desítek knihoven, které podporují zpracování grafiky. Častou oblíbenou volbou pro standardní zpracování obrázků je knihovna Pillow .

Co přesně knihovna Pillow umí a čím se liší od ostatních knihoven jazyka Python? Blíže se podíváme na vlastnosti oblíbené knihovny.

Co umí grafické knihovny Pythonu?

Grafické knihovny v Pythonu umožňují zpracování obrázků, které zahrnuje jejich čtení, segmentaci, transformaci a manipulaci. Kromě těchto základních úkolů mohou knihovny také provádět složitější operace, jako je extrakce metadat, výpočet derivací, obnovování a rozpoznávání obrazu, segmentace a klasifikace. 

Každá z knihoven se specializuje na jiné úkoly a výsledky závisí na konkrétním použití.

Co je na knihovnách Pillow jedinečného?

Pillow je fork knihovny PIL (Python Imaging Library), který přestal být aktualizován v roce 2009, takže byla vytvořena Pillow. Vzniklá knihovna je nativní modul, který je tvořen z poloviny v jazyce Python a z poloviny v jazyce C.

Pillow je knihovnou pro různé platformy a lze ji spustit na Windows pomocí systému řízení pip. Na iOS je nutné nejdříve nainstalovat vývojové prostředí XCode a aplikaci Homebrew, která umožňuje instalaci aplikací.

Podporuje více než 40 grafických formátů v režimu čtení. Plně podporuje 21 formátů, mezi nimi BMP, JPEG, GIF, TIFF, PNG a PSD. Více informací můžete najít v dokumentaci Pillow.

Specializace Pillow

Hlavní funkce knihovny Pillow se nacházejí v modulu Image. Vytvořit kopii této třídy lze nahráním obrázků, zpracováním jiných obrázků nebo jejich vytvořením. Pokud se soubor načítá z disku pomocí funkce open, knihovna automaticky určí jeho formát. 

Pillow má zpožděné načítání (lazy loading), takže při otevření obrázku nedochází k jeho dekódování a obrázky se ze souboru načítají až při pokusu o jejich zpracování. Je možné se podívat na vlastnosti souboru a zjistit, zda splňuje požadavky. RAM se použije až po vyvolání funkce load pro načtení potřebných dat.

V Pillow lze vyřezávat obrázky dvěma způsoby:

  • funkce crop, která zadává souřadnice levého horního a pravého dolního rohu, a příkaz resize;
  • příkazy reduce a thumbnail, které zohledňují poměr stran obrázku.

Pro překrytí jednoho obrázku na druhý (např. pro vodoznak) lze využít funkce vytvoření nového obrázku překrytím vodoznaku na hlavním obrázku. Výchozí umístění přidaného obrázku je v levém horním rohu. Aby bylo pozadí přidaného obrázku průhledné, lze použít modul ImageDraw pro vyříznutí tvarů v obrázcích. Sytost barev lze upravit pomocí modulu ImageEnhance, který poskytuje třídy pro úpravu jasu, kontrastu a ostrosti. Tyto třídy mají společné rozhraní, kde hodnoty jasu, kontrastu a ostrosti lze násobit požadovaným faktorem. Obrázek lze také zrcadlit pomocí funkce transpose a konstanty flip_left_right. Knihovna Pillow umožňuje také převádět obrázky do různých barevných režimů.

Převody v OpenCV

Pillow dokáže automaticky zpracovávat velké soubory obrázků. Pillow–SIMD převede obrázek s rozlišením 5184 × 3456 na obrázek s rozlišením 320 pixelů za 0,79 sekundy. Pillow se často používá ke sjednocování fotografií a analýze vlastností. Další knihovna, OpenCV, se používá pro strojové vidění.

OpenCV nečte EXIF ani digitální profil, proto nelze předem zjistit formát obrázku. Je to proto, že OpenCV je optimalizována pro práci s ověřenými zdroji, jako jsou například fotoaparáty, které vysílají fotografie ve standardním formátu a rozlišení.

Obrázky z Pillow lze exportovat do NumPy a OpenCV je bude moci zpracovat jako své vlastní. A naopak.

Co nabízejí další grafické knihovny v jazyce Python?

  • Scikit–image 

Jedná se o open source knihovnu, která pracuje s poli NumPy. Mezi její funkce patří konverze barevného prostoru, vylepšení obrazu, třídící filtr a operace s kreslením grafů – vykreslování grafů, histogramů a vytváření šablon. Scikit–image také umožňuje upravovat intenzitu obrazu.

  • Matplotlib.

Je balíček jazyka Python pro vizualizaci matematických operací – tvorbu diagramů, histogramů a grafů funkcí. Matplotlib také nabízí kreslení obrysů objektů a interaktivní označování – možnost vytvářet popisky na obrázcích. Skript si zapamatuje všechna kliknutí a uloží 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ůžete v ní ale také pracovat s obrázky. Například k vytváření Gaussova šumu na obrázcích. Ten je často výchozím bodem pro interpolaci a výpočet bodů zájmu. SciPy má také operace, které detekují změny intenzity obrazu.

  • NumPy

Užitečnou vlastností NumPy je reprezentace obrázků jako číselného pole. Objekty se používají k vytváření vektorových reprezentací a matic obrazu. V knihovně lze transformovat obrázky v různých barevných stupních a redukovat obrazový šum.

NumPy se také používá pro zpracování datových sad v computer vision. Vzhledem k vysokému rozlišení obrazů se v aplikacích počítačového vidění často používá snížení rozměru. V NumPy to lze provést pomocí analýzy hlavních komponent (PCA). Tímto způsobem je možné uložit více informací o trénovacích datech pomocí menšího počtu měření.

Autor: Alexander Tartačný

Více článků
Příručka od robot_dreams s příkladem syntaxe
Kam se dnes posouvají technologické hranice robotiky?