====== Načtení .png obrázku ====== Abychom dokázali s obrázky rozumně pracovat (učit se z nich a klasifikovat je), převedeme každý obrázek do formy číselného vektoru. Každé číslo bude odpovídat odstínu jednoho pixelu v obrázku. ===== TLDR ===== S využitím knihoven [[https://pillow.readthedocs.io/en/stable/|Pillow]] a [[https://numpy.org/|Numpy]] je to velmi snadné: from PIL import Image import numpy as np impath = 'train_data/img_1112.png' image_vector = np.array(Image.open(impath)).astype(int).flatten() ===== Vysvětlení ===== Pokud vás víc zajímá, co výše uvedený kód dělá, zkusme si ho přepsat do postupné formy: from PIL import Image import numpy as np impath = 'train_data/img_1112.png' im = Image.open(impath) print(type(im)) im2d = np.array(im) print(type(im2d), im2d.shape) im1d = im2d.flatten() print(type(im1d), im1d.shape) print(im1d) Po spuštění byste měli dostat výstup podobný následujícímu: (10, 10) (100,) [230 202 168 139 124 129 147 180 206 221 227 181 126 84 51 49 80 145 206 241 227 169 102 50 18 7 27 96 183 233 212 156 92 40 21 15 25 76 164 224 196 136 78 47 33 32 39 73 141 203 175 118 64 41 42 45 48 66 122 184 151 87 39 24 35 34 28 35 84 156 139 76 36 26 35 37 30 38 69 130 152 106 87 99 116 114 95 77 82 122 198 180 186 217 237 226 199 168 152 172] Vysvětlení: * Funkce ''Image.open()'' načte obrázek ze souboru a vrátí instanci třídy ''PngImageFile''. * Funkce ''np.array()'' zkonvertuje obrázek na instanci třídy ''numpy.ndarray'', tedy vytvoří 2D pole o rozměrech 10x10. * Metoda ''ndarray.astype()'' změní datový typ prvků pole. * Metoda ''ndarray.flatten()'' z matice 10x10 vytvoří vektor o délce 100, jehož obsah je vidět na konci výpisu.