At lave en smuk skitse kræver meget tid og kræfter. Heldigvis har programmering udviklet sig, så du nu nemt kan transformere billeder og skabe smukke designs. En imponerende teknik, du kan udføre, er at konvertere et billede til en digital skitse.
Selvom en mekanisk skitse ikke vil ligne din egen blyanttegning, er outputtet stadig værd at eksperimentere med. Lær hvordan du programmerer sådan en app ved hjælp af OpenCV-modulet i det supervenlige Python-sprog.
OpenCV-modulet
OpenCV er et Intel-udviklet og vedligeholdt open source-bibliotek med computervisionsmetoder, der bruges til billedbehandling og computervision. Det gør det nemt for brugere at skabe optimerede applikationer, interagere med billeder og videoer i realtid og vælge den ideelle algoritme til deres behov.
Nogle af de populære applikationer af OpenCV inkluderer ansigtsgenkendelse
, automatisk ansigtssporing i kinematografi, sociale mediefiltre, genkendelse af bilers nummerpladeog CCTV-overvågning. For at bruge OpenCV-modulet i Python skal du åbne din terminal og skrive følgende kommando:pip installer opencv-python
Sådan konverteres ethvert billede til en skitse ved hjælp af Python
For at konvertere dit yndlingsbillede til en digital skitse, start med at placere det i samme mappe som et nyt Python-program, for nem reference. Begynd derefter at bygge dit program ved at bruge følgende trin.
Denne eksempelkode er tilgængelig i en GitHub-depot og er gratis for dig at bruge under MIT-licensen.
Det første trin er at importere OpenCV-modulet til dit miljø. Når OpenCV er tilgængelig, kan du bruge dens funktionalitet til at udføre forskellige opgaver. Send stien til din billedfil ind i imread() funktion for at indlæse den. Gem dit billede i en variabel - kaldet billede 1 her - til fremtidig reference.
Gem titlen på vinduet i en variabel med navn vinduesnavn. Dette vil være nyttigt, når du vælger at vise billedet ved hjælp af imshow() fungere. Denne funktion kræver to parametre: titlen og det billede, du vil vise.
importere cv2
billede1 = cv2.imread('image.jpg')
vinduesnavn = 'Faktisk billede'
cv2.imshow (vinduesnavn, billede1)
Når du har det ønskede billede, skal du udføre fem operationer for at omdanne det til en skitse. Konverter først farvebilledet til gråtoner. Det kan du gøre med cvtColor() fungere. Denne funktion tager det billede ind, hvis farver du vil ændre og en konverteringskode som f.eks COLOR_BGR2GRAY.
grey_img = cv2.cvtColor (billede1, cv2.COLOR_BGR2GRAY)
Når du har et gråtonebillede, skal du vende dets farver. På dette tidspunkt skal du forstå, hvordan en computer danner et billede. Et billede består af mange bittesmå pixels med varierende intensitet. I et farvebillede indeholder hver pixel røde, grønne og blå komponenter, hver med en intensitet, der varierer fra 0 til 255.
I et gråtonebillede er der kun gråtoner, så intensiteten af en pixel varierer mellem 0 og 1. For at invertere pixelintensiteterne for dette billede skal du videregive gråtonebilledet til bitwise_not() fungere.
Som navnet antyder, inverterer denne funktion værdien af hver pixel til dens komplementære ækvivalent. Alle pixels, der er større end 0, indstilles til 0, og alle pixels, der er lig med 0, indstilles til 255.
invert = cv2.bitwise_not (grey_img)
Efter at have inverteret pixelintensiteterne kan du udjævne billedet ved hjælp af Gaussisk sløring. Gaussisk sløringsprocessen gør brug af et Gaussisk filter. Et Gauss-filter er et lavpasfilter, der kun tillader lave frekvenser at passere igennem, hvilket fjerner højfrekvenskomponenten af et signal eller et billede.
OpenCV'er Gaussisk sløring() funktion accepterer fire parametre. Disse er et matrixobjekt, der fungerer som kildebilledet, ksize (størrelsen af kernen) og sigmaX (den Gaussiske kernes standardafvigelse).
Antag, at du har et fysisk fotografi i hånden. Hvis du ville sløre det, kunne du påføre stykker voks eller pergamentpapir over det. Du kan forestille dig kernen som denne gennemsigtige bit papir. Digitalt sker det lidt anderledes. For at sløre, skærpe og anvende andre effekter på et digitalt billede multiplicerer du en matrix med intensiteten af billedets pixels.
Ksize er altid et positivt ulige tal. Når du øger kernestørrelsen, øges sløringen. For at forstå sigmaX antag, at du påfører voks på et papir. Når du påfører voks, bliver papiret ensartet gennemskinnelig. På samme måde skal du holde kernens værdier tæt på et bestemt punkt (gennemsnittet). SigmaX-værdien definerer forskellen mellem gennemsnittet og andre værdier af pixels i et billede.
Send det omvendte billede, kernestørrelsen som (21, 21) og 0 standardafvigelse til Gaussisk sløringsfunktionen:
sløring = cv2.GaussianBlur (inverter, (21, 21), 0)
Send det slørede billede til funktionen bitwise_not() igen for at invertere det:
inverted blur = cv2.bitwise_not (blur)
Brug endelig dele() funktion og til at udføre per-element opdeling af gråtonebilledet og det omvendte sløringsbillede med en skala på 256.
sketch = cv2.divide (grey_img, inverted blur, scale=256.0)
Funktionen udfører i det væsentlige følgende handling:
defdele(grey_img, b, inverted blur=256.0):
Vend tilbage (grå_img * skala) / omvendt sløring
Gem resultatet i en variabel med navnet skitse. For at gemme det endelige billede skal du sende et navn til din outputfil og skitsebilledet til indskriv() fungere. For at verificere det, kan du bruge imread()-funktionen til at indlæse det gemte skitsebillede, give en vinduestitel og vise det ved hjælp af imshow()-funktionen.
Brug ventetast() funktion ved at indtaste 0 for at vise det originale billedvindue og det genererede skitsevindue, indtil du trykker på en vilkårlig tast.
cv2.imwrite("sketch.jpeg", skitse)
billede = cv2.imread("sketch.jpeg")
vinduesnavn ='Skits billede'
cv2.imshow (vinduesnavn, billede)
cv2.waitKey(0)
Saml al koden, og du har dit program klar.
Eksempel på output af konvertering af et billede til en skitse ved hjælp af dette Python-program
Du kan vælge et smukt landskabsbillede og køre det gennem programmet for at generere denne fantastiske digitale skitse.
På et portrætbillede genererer programmet følgende digitale skitse.
Du kan eksperimentere med parametrene for funktionen efter din smag for at generere din ønskede digitale skitse.
Billedbehandling og computersyn
Billedbehandling og computersyn er to tæt beslægtede teknologiområder. De involverer begge at ændre digitale billeder for at få de ønskede resultater. Billedbehandling fokuserer på at forbedre et billede, mens computersyn søger at finde mønstre og objekter i et billede for at forstå det.
Scikit-image er et andet Python-bibliotek, der giver en bred vifte af billedbehandlingsfunktioner. Den har flere prækompilerede moduler, filtre, lag, transformationer og mere. Hvis du leder efter et modul til brug for deep learning-modeller som CNN og RNN, vil du måske udforske Torchvision.