Tokie skaitytojai kaip jūs padeda palaikyti MUO. Kai perkate naudodami nuorodas mūsų svetainėje, galime uždirbti filialų komisinius. Skaityti daugiau.

Norint sukurti gražų eskizą, reikia daug laiko ir pastangų. Laimei, programavimas pasikeitė, todėl dabar galite lengvai transformuoti vaizdus ir kurti gražius dizainus. Vienas įspūdingas būdas, kurį galite atlikti, yra vaizdo konvertavimas į skaitmeninį eskizą.

Nors mechaninis eskizas neatrodys tiksliai taip, kaip jūsų pieštuko piešinys, vis tiek verta eksperimentuoti su išvestimi. Sužinokite, kaip programuoti tokią programėlę naudojant OpenCV modulį itin patogia Python kalba.

OpenCV modulis

„OpenCV“ yra „Intel“ sukurta ir prižiūrima atvirojo kodo kompiuterinio matymo metodų, naudojamų vaizdo apdorojimui ir kompiuteriniam regėjimui, biblioteka. Tai leidžia vartotojams lengvai kurti optimizuotas programas, sąveikauti su vaizdais ir vaizdo įrašais realiuoju laiku ir pasirinkti idealų algoritmą pagal savo poreikius.

Kai kurios populiarios programos

instagram viewer
OpenCV apima veido aptikimą, automatinis veido sekimas kinematografijoje, socialinės žiniasklaidos filtrai, automobilio valstybinio numerio atpažinimasir CCTV stebėjimas. Norėdami naudoti „OpenCV“ modulį „Python“, atidarykite terminalą ir įveskite šią komandą:

pip įdiegti opencv-python

Kaip konvertuoti bet kokį vaizdą į eskizą naudojant Python

Norėdami konvertuoti savo mėgstamą vaizdą į skaitmeninį eskizą, pirmiausia įdėkite jį į tą patį aplanką kaip ir naują Python programą, kad būtų lengviau pateikti nuorodas. Tada pradėkite kurti programą atlikdami šiuos veiksmus.

Šis kodo pavyzdys yra a GitHub saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.

Pirmasis žingsnis yra importuoti OpenCV modulį į savo aplinką. Kai bus prieinamas OpenCV, galėsite naudoti jo funkcijas įvairioms užduotims atlikti. Perduokite vaizdo failo kelią į neskaityta () funkcija jį įkelti. Išsaugokite savo vaizdą kintamajame, vadinamame vaizdas1 čia – ateičiai.

Išsaugokite lango pavadinimą kintamajame pavadinimu lango_pavadinimas. Tai bus naudinga, kai pasirinksite vaizdą rodyti naudodami imshow () funkcija. Šiai funkcijai reikalingi du parametrai: pavadinimas ir vaizdas, kurį norite rodyti.

importuoti cv2

vaizdas1 = cv2.imread(„vaizdas.jpg“)
lango_pavadinimas = „Tikras vaizdas“
cv2.imshow (lango_pavadinimas, vaizdas1)

Kai turėsite norimą vaizdą, turite atlikti penkias operacijas, kad paverstumėte jį eskizu. Pirmiausia konvertuokite spalvotą vaizdą į pilkos spalvos tonus. Tai galite padaryti su cvtColor() funkcija. Ši funkcija paima vaizdą, kurio spalvas norite pakeisti, ir konversijos kodą, pvz., COLOR_BGR2GRAY.

grey_img = cv2.cvtColor (vaizdas1, cv2.COLOR_BGR2GRAY)

Kai turėsite pilkos spalvos vaizdą, pakeiskite jo spalvas. Šiuo metu turite suprasti, kaip kompiuteris formuoja vaizdą. Vaizdas susideda iš daugybės mažų pikselių, kurių intensyvumas skiriasi. Spalvoto vaizdo kiekviename pikselyje yra raudonos, žalios ir mėlynos spalvos komponentų, kurių kiekvieno intensyvumas svyruoja nuo 0 iki 255.

Pilkų atspalvių vaizde yra tik pilkų atspalvių, todėl pikselio intensyvumas svyruoja nuo 0 iki 1. Norėdami pakeisti šio vaizdo pikselių intensyvumą, perduokite pilkos spalvos vaizdą į bitwise_not() funkcija.

Kaip rodo pavadinimas, ši funkcija apverčia kiekvieno pikselio vertę į jo papildomą ekvivalentą. Visi pikseliai, kurie yra didesni nei 0, nustatomi į 0, o visi pikseliai, kurie lygūs 0, nustatomi į 255.

invert = cv2.bitwise_not (grey_img)

Pakeitę pikselių intensyvumą, galite išlyginti vaizdą naudodami Gaussian Blur. Gauso suliejimo procese naudojamas Gauso filtras. Gauso filtras yra žemų dažnių filtras, leidžiantis prasiskverbti tik žemiems dažniams, pašalinant aukšto dažnio signalo arba vaizdo komponentą.

OpenCV Gauso suliejimo() funkcija priima keturis parametrus. Tai yra matricos objektas, kuris veikia kaip šaltinio vaizdas, ksize (branduolių dydis) ir sigmaX (Gauso branduolio standartinis nuokrypis).

Tarkime, kad rankoje turite fizinę nuotrauką. Jei norite jį sulieti, galite užtepti vaško arba pergamentinio popieriaus gabalėlių. Galite įsivaizduoti branduolį kaip šį permatomą popieriaus lapą. Skaitmeniniu požiūriu tai vyksta kiek kitaip. Norėdami sulieti, paryškinti ir pritaikyti kitus efektus skaitmeniniame vaizde, padauginkite matricą iš vaizdo pikselių intensyvumo.

Ksize visada yra teigiamas nelyginis skaičius. Didinant branduolio dydį, suliejimas didėja. Norėdami suprasti sigmaX, tarkime, kad vašką tepate ant popieriaus. Kai tepate vašku, popierius tampa tolygiai permatomas. Panašiai turite išlaikyti branduolio reikšmes arti konkretaus taško (vidurkio). SigmaX reikšmė apibrėžia skirtumą tarp vidutinių ir kitų vaizdo pikselių verčių.

Perduokite apverstą vaizdą, branduolio dydį kaip (21, 21) ir 0 standartinį nuokrypį į Gauso suliejimo funkciją:

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

Dar kartą perduokite neryškų vaizdą į funkciją bitwise_not(), kad jį apverstumėte:

invertedblur = cv2.bitwise_not (suliejimas)

Galiausiai naudokite padalinti() funkciją ir atlikti pilkų atspalvių vaizdų masyvo ir apversto neryškaus vaizdo masyvo padalijimą pagal 256 skalę.

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

Iš esmės funkcija atlieka šią operaciją:

defpadalinti(grey_img, b, invertedblur=256.0):
grąžinti (grey_img * skalė) / apverstas suliejimas

Išsaugokite rezultatą kintamajame eskizo pavadinimu. Norėdami išsaugoti galutinį vaizdą, perduokite išvesties failo pavadinimą ir eskizo vaizdą imwrite () funkcija. Norėdami tai patikrinti, galite naudoti imread() funkciją, kad įkeltumėte išsaugotą eskizo vaizdą, suteiktumėte lango pavadinimą ir parodytumėte jį naudodami imshow() funkciją.

Naudoti palaukti () funkciją, palikdami 0, kad būtų rodomas pradinis vaizdo langas ir sugeneruotas eskizo langas, kol paspausite bet kurį klavišą.

cv2.imwrite("sketch.jpeg", eskizas)
vaizdas = cv2.imread("sketch.jpeg")
lango_pavadinimas =„Eskizo vaizdas“
cv2.imshow (lango_pavadinimas, vaizdas)
cv2.waitKey(0)

Sujunkite visą kodą ir turite paruoštą programą.

Vaizdo konvertavimo į eskizą naudojant šią Python programą pavyzdys

Galite pasirinkti gražų kraštovaizdžio vaizdą ir paleisti jį per programą, kad sukurtumėte šį nuostabų skaitmeninį eskizą.

Portretiniame vaizde programa sukuria tokį skaitmeninį eskizą.

Galite eksperimentuoti su funkcijos parametrais pagal savo skonį, kad sukurtumėte norimą skaitmeninį eskizą.

Vaizdo apdorojimas ir kompiuterinis matymas

Vaizdo apdorojimas ir kompiuterinis matymas yra dvi glaudžiai susijusios technologijų sritys. Jie abu apima skaitmeninių vaizdų keitimą, kad būtų pasiekti norimi rezultatai. Apdorojant vaizdą daugiausia dėmesio skiriama vaizdo gerinimui, o kompiuterinis regėjimas vaizde ieško modelių ir objektų, kad jį suprastų.

„Scikit-image“ yra dar viena „Python“ biblioteka, teikianti daugybę vaizdų apdorojimo funkcijų. Jame yra keli iš anksto sukompiliuoti moduliai, filtrai, sluoksniai, transformacijos ir kt. Jei ieškote modulio, kurį galėtumėte naudoti gilaus mokymosi modeliams, tokiems kaip CNN ir RNN, galbūt norėsite ištirti Torchvision.