Izdelava čudovite skice zahteva veliko časa in truda. Na srečo se je programiranje razvilo, tako da lahko zdaj enostavno preoblikujete slike in ustvarite čudovite dizajne. Ena impresivna tehnika, ki jo lahko izvedete, je pretvorba slike v digitalno skico.
Medtem ko mehanska skica ne bo videti popolnoma kot vaša lastna risba s svinčnikom, je rezultat še vedno vreden eksperimentiranja. Naučite se programirati takšno aplikacijo z uporabo modula OpenCV v izjemno prijaznem jeziku Python.
Modul OpenCV
OpenCV je odprtokodna knjižnica metod računalniškega vida, ki jo je razvil in vzdržuje Intel in se uporablja za obdelavo slik in računalniški vid. Uporabnikom olajša ustvarjanje optimiziranih aplikacij, interakcijo s slikami in videoposnetki v realnem času ter izbiro idealnega algoritma za njihove potrebe.
Nekaj priljubljenih aplikacij OpenCV vključuje zaznavanje obrazov
, samodejno sledenje obrazom v kinematografiji, filtri družbenih medijev, prepoznavanje avtomobilskih tablic, in nadzor CCTV. Če želite uporabiti modul OpenCV v Pythonu, odprite terminal in vnesite naslednji ukaz:pip namestite opencv-python
Kako pretvoriti katero koli sliko v skico z uporabo Pythona
Če želite pretvoriti vašo najljubšo sliko v digitalno skico, jo začnite tako, da jo postavite v isto mapo kot nov program Python, za lažje referenciranje. Nato začnite graditi svoj program po naslednjih korakih.
Ta primer kode je na voljo v a Repozitorij GitHub in je brezplačen za uporabo pod licenco MIT.
Prvi korak je uvoz modula OpenCV v vaše okolje. Ko bo OpenCV na voljo, lahko uporabite njegovo funkcionalnost za izvajanje različnih nalog. Podajte pot vaše slikovne datoteke v imread() funkcijo za nalaganje. Shranite sliko v spremenljivko, imenovano slika1 tukaj—za nadaljnjo uporabo.
Shranite naslov okna v spremenljivko z imenom ime_okna. To bo uporabno, ko se odločite za prikaz slike z uporabo imshow() funkcijo. Ta funkcija zahteva dva parametra: naslov in sliko, ki jo želite prikazati.
uvoz cv2
slika1 = cv2.imread('image.jpg')
ime_okna = 'Dejanska slika'
cv2.imshow (ime_okna, slika1)
Ko imate želeno sliko, morate izvesti pet operacij, da jo spremenite v skico. Najprej pretvorite barvno sliko v sivine. To lahko storite z cvtColor() funkcijo. Ta funkcija sprejme sliko, katere barve želite spremeniti, in kodo za pretvorbo, kot je npr COLOR_BGR2SIVA.
grey_img = cv2.cvtColor (slika1, cv2.COLOR_BGR2GRAY)
Ko imate sliko v sivinah, obrnite njene barve. Na tej točki morate razumeti, kako računalnik oblikuje sliko. Slika je sestavljena iz številnih drobnih slikovnih pik z različnimi intenzivnostmi. V barvni sliki vsaka slikovna pika vsebuje rdeče, zelene in modre komponente, vsaka z intenzivnostjo, ki se spreminja od 0 do 255.
V sivinski sliki so samo odtenki sive, zato se intenzivnost piksla spreminja med 0 in 1. Če želite obrniti intenzivnost slikovnih pik te slike, prenesite sivinsko sliko v bitwise_not() funkcijo.
Kot že ime pove, ta funkcija obrne vrednost vsake slikovne pike na njen komplementarni ekvivalent. Vse slikovne pike, ki so večje od 0, so nastavljene na 0, vse slikovne pike, ki so enake 0, pa so nastavljene na 255.
invert = cv2.bitwise_not (grey_img)
Ko obrnete intenzivnost slikovnih pik, lahko zgladite sliko s pomočjo Gaussove zameglitve. Postopek Gaussian Blur uporablja Gaussov filter. Gaussov filter je nizkopasovni filter, ki prepušča samo nizke frekvence in tako odstrani visokofrekvenčno komponento signala ali slike.
OpenCV Gaussova zameglitev() funkcija sprejme štiri parametre. To so matrični objekt, ki deluje kot izvorna slika, ksize (velikost jedra) in sigmaX (Gaussovo standardno odstopanje jedra).
Recimo, da imate v roki fizično fotografijo. Če bi ga želeli zamegliti, lahko čeznj nanesete koščke voska ali pergamentnega papirja. Jedro si lahko predstavljate kot ta prozoren košček papirja. Digitalno se to zgodi nekoliko drugače. Za zameglitev, izostritev in uporabo drugih učinkov na digitalni sliki pomnožite matriko z intenzivnostjo slikovnih pik.
Ksize je vedno pozitivno liho število. Ko povečate velikost jedra, se zamegljenost poveča. Da bi razumeli sigmaX, predpostavite, da nanašate vosek na papir. Ko nanesete vosek, postane papir enakomerno prosojen. Podobno morate ohranjati vrednosti jedra blizu določene točke (povprečje). Vrednost sigmaX določa razliko med povprečnimi in drugimi vrednostmi slikovnih pik na sliki.
Prenesite obrnjeno sliko, velikost jedra kot (21, 21) in standardno deviacijo 0 v funkcijo Gaussian Blur:
blur = cv2.GaussianBlur (invert, (21, 21), 0)
Ponovno posredujte zamegljeno sliko funkciji bitwise_not(), da jo obrnete:
invertedblur = cv2.bitwise_not (zameglitev)
Končno uporabite razdeli() funkcijo in za izvedbo razdelitve po elementih niza sivinskih slik in niza obrnjenih zamegljenih slik z lestvico 256.
skica = cv2.divide (grey_img, invertedblur, scale=256.0)
V bistvu funkcija izvaja naslednje operacije:
defrazdeliti(grey_img, b, invertedblur=256.0):
vrnitev (siva_img * lestvica) / obrnjena zameglitev
Rezultat shranite v spremenljivko z imenom skica. Če želite shraniti končno sliko, posredujte ime za vašo izhodno datoteko in sliko skice v imwrite() funkcijo. Če ga želite preveriti, lahko s funkcijo imread() naložite shranjeno sliko skice, podate naslov oknu in ga prikažete s funkcijo imshow().
Uporabi čakalna tipka() funkcijo tako, da posredujete 0 za prikaz okna izvirne slike in okna ustvarjene skice, dokler ne pritisnete katere koli tipke.
cv2.imwrite("sketch.jpeg", skica)
slika = cv2.imread("sketch.jpeg")
ime_okna ='Skična slika'
cv2.imshow (ime_okna, slika)
cv2.waitKey(0)
Zberite vso kodo in že imate pripravljen program.
Vzorec izpisa pretvorbe slike v skico s tem programom Python
Izberete lahko čudovito sliko pokrajine in jo poženete skozi program, da ustvarite to osupljivo digitalno skico.
Na portretni sliki program ustvari naslednjo digitalno skico.
Po svojih željah lahko eksperimentirate s parametri funkcije, da ustvarite želeno digitalno skico.
Obdelava slik in računalniški vid
Obdelava slik in računalniški vid sta tesno povezani področji tehnologije. Oba vključujeta spreminjanje digitalnih slik za doseganje želenih rezultatov. Obdelava slik se osredotoča na izboljšanje slike, medtem ko računalniški vid išče vzorce in predmete v sliki, da bi jo razumel.
Scikit-image je še ena knjižnica Python, ki ponuja široko paleto funkcij za obdelavo slik. Ima več vnaprej prevedenih modulov, filtrov, plasti, transformacij in še več. Če iščete modul za uporabo pri modelih globokega učenja, kot sta CNN in RNN, boste morda želeli raziskati Torchvision.