Lekce 1 - Úvod do analýzy obrazu a videa v Pythonu
Zdravím vás u první lekce Python kurzu, který se věnuje analýze obrazu
a videa. V tomto kurzu se seznámíme s knihovnami OpenCV
a
PIL
pro práci s obrazem v Pythonu, numpy
pro práci s
čísly a matplotlib
pro analýzu. Cílem kurzu je naučit vás
pracovat s obrazem a videem v Pythonu a nakonec se dozvědět i něco málo o
strojovém učení.
Instalace
Doporučuji nainstalovat Anaconda/Miniconda distribuci Pythonu, protože instalace knihovny OpenCV je tak jednodušší a package manager conda se postará o všechny požadavky knihovny.
Nejdříve si nainstalujeme knihovnu numpy
, tu nejspíše budete
mít již nainstalovanou:
py -m pip install numpy
Pokud používáte Anaconda/MiniConda distribuci Pythonu, upravte si příkazy pro instalace jako:
conda install numpy
Dále si nainstalujeme knihovnu matplotlib
, která slouží pro
analýzu a vizualizaci dat:
py -m pip install matplotlib
Nainstalujeme knihovnu PIL:
py -m pip install Pillow
A nakonec tu nejdůležitější knihovnu, kterou je OpenCV, což je knihovna napsaná v C a C++.
- Pokud máte distribuci Anaconda nebo Miniconda, zadejte:
conda install -c conda-forge opencv
- Pokud tuto distribuci nepoužíváte, nainstalujte jako
py -m pip install opencv-python
, ale může zde nastat problém s požadavky
Pokud instalace knihovny OpenCV proběhla úspěšně, neuvidíte žádnou červenou hlášku. Pro jistotu si zkusíme knihovnu v příkazovém řádku naimportovat:

Úvod
Výtečně, pokud jste se dostali až sem, vše vám funguje jak má a jste připraveni. V této lekci budeme pracovat s obrázkem níže. Pokud chcete použít nějaký vlastní, nic vám v tom nebrání.

Obrázek si uložte do složky se svým projektem jako soubor
letadlo.jpg
.
Knihovna OpenCV
Nejdříve si obrázek otevřeme a zobrazíme pomocí OpenCV:
import cv2 import numpy as np import matplotlib.pyplot as plt from PIL import Image img = cv2.imread("letadlo.jpg") cv2.imshow("obrazek", img) cv2.waitKey() cv2.destroyAllWindows()
Jako první si importujeme všechny knihovny, s kterými budeme v této lekci
pracovat. Poté si otevřeme obrázek funkcí
cv2.imread(obrazek, parametr)
. Pokud parametr neuvedeme, použije
se IMREAD_COLOR
, který nám otevře obrázek bez alfa kanálu
(průhlednosti). Pokud bychom z nějakého důvodu chtěli alfa kanál použít
jako parametr, použijeme IMREAD_UNCHANGED
. Obrázek můžeme také
otevřít s parametrem IMREAD_GRAYSCALE
, tehdy bude šedý.
Obrázek si zobrazíme funkcí cv2.imshow(nazev_okna, obrazek)
a
počkáme na stisknutí nějaké klávesy pomocí
cv2.waitKey(zpoždění - pokud přehráváme video, je potřeba 1 a více)
.
Poté všechna okna zavřeme funkcí cv2.destroyAllWindows()
.
Knihovna PIL
Nyní si obrázek zkusíme otevřít pomocí knihovny PIL:
img = Image.open("letadlo.jpg") img = np.array(img) cv2.imshow("obrazek", img) cv2.waitKey() cv2.destroyAllWindows()
Otevření provedeme funkcí Image.open(obrazek)
. Poté obrázek
musíme převést na numpy array pomocí np.array(list)
, což je
list v knihovně pro práci s čísly. S tou poté pracuje OpenCV. Obrázek
zobrazíme a můžeme si všimnout, že má poněkud jiné barvy, jelikož
knihovna OpenCV pracuje s BGR (blue, green, red) a pokud nahrajeme obrázek v
knihovně PIL, která pracuje pro změnu s RGB, stane se toto:

Abychom problému s barvami zabránili, musíme před zobrazením obrázku
převést obrázek na BGR funkcí
cv2.cvtColor(obrazek, parametr)
:
img = Image.open("letadlo.jpg") img = np.array(img) img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) cv2.imshow("obrazek", img) cv2.waitKey() cv2.destroyAllWindows()
A výsledek:

Nyní vidíme barvy, které obrázek opravdu má.
Knihovna matplotlib
Nakonec aplikujeme parametr IMREAD_GRAYSCALE
a obrázek
zobrazíme v knihovně matplotlib
, které nastavíme parametr
cmap
neboli ColorMap na "gray", aby se nám šedý obrázek
zobrazil. Poté vykreslíme červenou čáru s tloušťkou 12 do grafu pomocí
funkce plt.plot(x, y, barva, **kwargs)
:
img = cv2.imread("letadlo.jpg", cv2.IMREAD_GRAYSCALE) plt.imshow(img, cmap = "gray") plt.plot([800,300],[400,200], "red", linewidth = 12) plt.show()
Výsledek:

Pokud se vám knihovna matplotlib
nebo PIL
nelíbí, bohatě vám stačí pouze OpenCV
. Tyto znalosti se nám
ovšem hodí, až se v pozdějších lekcí budeme věnovat vizualizaci dat.
Kdybyste chtěli obrázek uložit, použijete funkci
cv2.imwrite(nazev, obrazek)
.
Zdrojový kód najdete ke stažení v příloze článku.
V další lekci, Práce s videem v Pythonu a kreslení a psaní do obrázků, si ukážeme, jak načíst, přehrát a uložit video v různých formátech v knihovně OpenCV v Pythonu a také kreslení tvarů a textu do obrázků.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 69x (383.78 kB)
Aplikace je včetně zdrojových kódů v jazyce Python