Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

Vytvoření krásného náčrtu vyžaduje spoustu času a úsilí. Naštěstí se programování vyvinulo, takže nyní můžete snadno transformovat obrázky a vytvářet krásné návrhy. Jednou působivou technikou, kterou můžete provést, je převést obrázek na digitální skicu.

I když mechanická skica nebude vypadat přesně jako vaše vlastní kresba tužkou, výstup stále stojí za to experimentovat. Naučte se programovat takovou aplikaci pomocí modulu OpenCV v super příjemném jazyce Python.

Modul OpenCV

OpenCV je Intelem vyvinutá a udržovaná open-source knihovna metod počítačového vidění používaných pro zpracování obrazu a počítačové vidění. Uživatelům usnadňuje vytváření optimalizovaných aplikací, interakci s obrázky a videi v reálném čase a výběr ideálního algoritmu pro jejich potřeby.

Některé z populárních aplikací OpenCV zahrnuje detekci obličeje, automatické sledování tváře v kinematografii, filtry sociálních médií,

instagram viewer
rozpoznávání SPZ autaa CCTV monitorování. Chcete-li použít modul OpenCV v Pythonu, otevřete svůj terminál a zadejte následující příkaz:

pip install opencv-python

Jak převést libovolný obrázek na skicu pomocí Pythonu

Chcete-li převést svůj oblíbený obrázek na digitální skicu, začněte tím, že jej umístíte do stejné složky jako nový program Python, abyste mohli snadno odkazovat. Poté začněte sestavovat svůj program pomocí následujících kroků.

Tento příklad kódu je k dispozici v a úložiště GitHub a můžete jej používat zdarma na základě licence MIT.

Prvním krokem je import modulu OpenCV do vašeho prostředí. Jakmile je OpenCV k dispozici, můžete jeho funkčnost používat k provádění různých úkolů. Předejte cestu k souboru obrázku do imread() funkce pro jeho načtení. Uložte obrázek do proměnné – tzv obrázek1 zde – pro budoucí použití.

Uložte název okna do proměnné s názvem název_okna. To bude užitečné, když se rozhodnete zobrazit obrázek pomocí imshow() funkce. Tato funkce vyžaduje dva parametry: název a obrázek, který chcete zobrazit.

import cv2

obrázek1 = cv2.imread('obrazek.jpg')
název_okna = 'Aktuální obrázek'
cv2.imshow (název_okna, obrázek1)

Jakmile budete mít požadovaný obrázek, musíte provést pět operací k jeho transformaci na skicu. Nejprve převeďte barevný obrázek na stupně šedi. Můžete tak učinit pomocí cvtColor() funkce. Tato funkce převezme obrázek, jehož barvy chcete změnit, a konverzní kód, např COLOR_BGR2GRAY.

grey_img = cv2.cvtColor (obrázek1, cv2.COLOR_BGR2GRAY)

Jakmile budete mít obrázek ve stupních šedi, invertujte jeho barvy. V tomto okamžiku musíte pochopit, jak počítač vytváří obraz. Obraz se skládá z mnoha malých pixelů s různou intenzitou. V barevném obrázku obsahuje každý pixel červenou, zelenou a modrou složku, každá s intenzitou, která se pohybuje od 0 do 255.

V obrázku ve stupních šedi jsou pouze odstíny šedé, takže intenzita pixelu se pohybuje mezi 0 a 1. Chcete-li invertovat intenzity pixelů tohoto obrázku, předejte obrázek ve stupních šedi do bitově_ne() funkce.

Jak název napovídá, tato funkce invertuje hodnotu každého pixelu na jeho komplementární ekvivalent. Všechny pixely, které jsou větší než 0, jsou nastaveny na 0 a všechny pixely, které jsou rovné 0, jsou nastaveny na 255.

invert = cv2.bitwise_not (grey_img)

Po převrácení intenzit pixelů můžete obraz vyhladit pomocí Gaussian Blur. Proces Gaussian Blur využívá Gaussův filtr. Gaussův filtr je nízkofrekvenční filtr, který propouští pouze nízké frekvence a odstraňuje vysokofrekvenční složku signálu nebo obrazu.

OpenCV Gaussovské rozostření() funkce přijímá čtyři parametry. Jedná se o maticový objekt, který funguje jako zdrojový obrázek, ksize (velikost jádra) a sigmaX (směrodatná odchylka Gaussova jádra).

Předpokládejme, že máte v ruce fyzickou fotografii. Pokud jste ji chtěli rozmazat, můžete na ni nanést kousky vosku nebo pergamenového papíru. Jádro si můžete představit jako tento průhledný kousek papíru. Digitálně se to děje trochu jinak. Chcete-li rozostřit, zostřit a použít na digitální obraz další efekty, vynásobíte matici intenzitou obrazových bodů obrazu.

Ksize je vždy kladné liché číslo. Jak zvětšujete velikost jádra, zvětšuje se rozostření. Abyste pochopili sigmaX, předpokládejte, že nanášíte vosk na papír. Při nanášení vosku se papír stává rovnoměrně průsvitným. Podobně musíte udržovat hodnoty jádra blízko konkrétnímu bodu (průměru). Hodnota sigmaX definuje rozdíl mezi průměrem a ostatními hodnotami pixelů v obrázku.

Předejte obrácený obrázek, velikost jádra jako (21, 21) a standardní odchylku 0 do funkce Gaussian Blur:

blur = cv2.GaussianBlur (invertovat, (21, 21), 0)

Znovu předejte rozmazaný obrázek funkci bitwise_not() a invertujte jej:

invertedblur = cv2.bitwise_not (rozostření)

Nakonec použijte rozdělit() a provést rozdělení obrazového pole ve stupních šedi a pole obráceného rozostření po jednotlivých prvcích s měřítkem 256.

skica = cv2.divide (grey_img, invertedblur, scale=256.0)

Funkce v podstatě provádí následující operace:

defrozdělit(grey_img, b, invertedblur=256.0):
vrátit se (grey_img * scale) / invertedblur

Uložte výsledek do proměnné s názvem skica. Chcete-li uložit konečný obrázek, předejte název výstupního souboru a obrázek náčrtu imwrite() funkce. Chcete-li to ověřit, můžete pomocí funkce imread() načíst uložený obrázek náčrtu, zadat název okna a zobrazit jej pomocí funkce imshow().

Použijte waitkey() Přechodem 0 zobrazíte okno původního obrázku a vygenerované okno náčrtu, dokud nestisknete libovolnou klávesu.

cv2.imwrite("sketch.jpeg", skica)
obrázek = cv2.imread("sketch.jpeg")
název_okna ='Sketch image'
cv2.imshow (název_okna, obrázek)
cv2.waitKey(0)

Dejte dohromady celý kód a máte připravený program.

Ukázkový výstup převodu obrázku na skicu pomocí tohoto programu v Pythonu

Můžete si vybrat krásný obrázek na šířku a spustit jej programem, abyste vytvořili tento úžasný digitální náčrt.

Na obrázku na výšku program vygeneruje následující digitální skicu.

Můžete experimentovat s parametry funkce podle své libosti a vytvořit tak požadovanou digitální skicu.

Zpracování obrazu a počítačové vidění

Zpracování obrazu a počítačové vidění jsou dvě úzce související oblasti technologie. Oba zahrnují úpravu digitálních obrázků, aby se dosáhlo požadovaných výsledků. Zpracování obrazu se zaměřuje na vylepšení obrazu, zatímco počítačové vidění hledá vzory a objekty v obraze, aby mu porozumělo.

Scikit-image je další knihovna Pythonu, která poskytuje širokou škálu funkcí pro zpracování obrázků. Má několik předkompilovaných modulů, filtrů, vrstev, transformací a dalších. Pokud hledáte modul pro modely hlubokého učení, jako jsou CNN a RNN, možná budete chtít prozkoumat Torchvision.