Läsare som du hjälper till att stödja MUO. När du gör ett köp med hjälp av länkar på vår webbplats kan vi tjäna en affiliate-provision. Läs mer.

Att göra en vacker skiss kräver mycket tid och ansträngning. Lyckligtvis har programmering utvecklats så att du nu enkelt kan omvandla bilder och skapa vackra mönster. En imponerande teknik du kan utföra är att konvertera en bild till en digital skiss.

Även om en mekanisk skiss inte kommer att se exakt ut som din egen pennteckning, är resultatet fortfarande värt att experimentera med. Lär dig hur du programmerar en sådan app med OpenCV-modulen på det supervänliga Python-språket.

OpenCV-modulen

OpenCV är ett Intel-utvecklat och underhållet bibliotek med öppen källkod med datorseendemetoder som används för bildbehandling och datorseende. Det gör det enkelt för användare att skapa optimerade applikationer, interagera med bilder och videor i realtid och välja den perfekta algoritmen för deras behov.

Några av de populära applikationerna av OpenCV inkluderar ansiktsdetektion

instagram viewer
, automatisk ansiktsspårning i film, filter för sociala medier, igenkänning av bilens registreringsskyltoch CCTV-övervakning. För att använda OpenCV-modulen i Python, öppna din terminal och skriv följande kommando:

pip installera opencv-python

Hur man konverterar vilken bild som helst till en skiss med Python

För att konvertera din favoritbild till en digital skiss, börja med att placera den i samma mapp som ett nytt Python-program, för enkel referens. Börja sedan bygga ditt program med hjälp av följande steg.

Denna exempelkod är tillgänglig i en GitHub-förråd och är gratis för dig att använda under MIT-licensen.

Det första steget är att importera OpenCV-modulen till din miljö. När OpenCV är tillgängligt kan du använda dess funktionalitet för att utföra olika uppgifter. Skicka sökvägen till din bildfil till imread() funktion för att ladda den. Lagra din bild i en variabel – kallad bild1 här – för framtida referens.

Lagra fönstrets titel i en variabel med namnet fönsternamn. Detta kommer att vara användbart när du väljer att visa bilden med hjälp av imshow() fungera. Denna funktion kräver två parametrar: titeln och bilden du vill visa.

importera cv2

bild1 = cv2.imread('image.jpg')
fönsternamn = "Faktisk bild"
cv2.imshow (fönsternamn, bild1)

När du har den önskade bilden måste du utföra fem operationer för att omvandla den till en skiss. Konvertera först färgbilden till gråskala. Du kan göra det med cvtColor() fungera. Denna funktion tar in bilden vars färger du vill ändra och en konverteringskod som t.ex COLOR_BGR2GRAY.

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

När du har en gråskalebild, invertera dess färger. Vid det här laget måste du förstå hur en dator bildar en bild. En bild består av många små pixlar med varierande intensitet. I en färgbild innehåller varje pixel röda, gröna och blå komponenter, var och en med en intensitet som varierar från 0 till 255.

I en gråskalebild finns det bara nyanser av grått, så intensiteten på en pixel varierar mellan 0 och 1. För att invertera pixelintensiteten för denna bild, skicka gråskalebilden till bitwise_not() fungera.

Som namnet antyder inverterar denna funktion värdet på varje pixel till dess komplementära motsvarighet. Alla pixlar som är större än 0 ställs in på 0 och alla pixlar som är lika med 0 ställs in på 255.

invertera = cv2.bitwise_not (grey_img)

Efter att ha inverterat pixelintensiteterna kan du jämna ut bilden med hjälp av Gaussisk oskärpa. Gaussisk oskärpa-processen använder sig av ett Gaussiskt filter. Ett gaussiskt filter är ett lågpassfilter som endast tillåter låga frekvenser att passera igenom, vilket tar bort den högfrekventa komponenten i en signal eller en bild.

Öppna CV GaussianBlur() Funktionen accepterar fyra parametrar. Dessa är ett matrisobjekt som fungerar som källbilden, ksize (storleken på kärnan) och sigmaX (den Gaussiska kärnans standardavvikelse).

Anta att du har ett fysiskt fotografi i handen. Om du ville sudda ut det kan du applicera bitar av vax eller bakplåtspapper över det. Du kan föreställa dig kärnan som denna genomskinliga pappersbit. Digitalt händer det här lite annorlunda. För att sudda ut, skärpa och använda andra effekter på en digital bild multiplicerar du en matris med intensiteten av bildens pixlar.

Ksize är alltid ett positivt udda tal. När du ökar kärnans storlek ökar oskärpan. För att förstå sigmaX anta att du applicerar vax på ett papper. När du applicerar vax blir papperet jämnt genomskinligt. På samma sätt måste du hålla kärnans värden nära en specifik punkt (genomsnittet). SigmaX-värdet definierar skillnaden mellan medelvärdet och andra värden för pixlarna i en bild.

Skicka den inverterade bilden, kärnans storlek som (21, 21) och 0 standardavvikelse till Gaussian Blur-funktionen:

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

Skicka den suddiga bilden till bitwise_not()-funktionen igen för att invertera den:

inverted blur = cv2.bitwise_not (oskärpa)

Använd slutligen dela upp() funktion och att utföra per-element division av gråskalebilden och den inverterade oskärpa bilduppsättningen med en skala på 256.

sketch = cv2.divide (grey_img, inverted blur, scale=256.0)

Funktionen utför i huvudsak följande operation:

defdela upp(grey_img, b, inverted blur=256.0):
lämna tillbaka (grey_img * skala) / inverterad oskärpa

Lagra resultatet i en variabel med namnet sketch. För att spara den slutliga bilden, skicka ett namn för din utdatafil och skissbilden till skriv() fungera. För att verifiera det kan du använda imread()-funktionen för att ladda den sparade skissbilden, ge en fönstertitel och visa den med imshow()-funktionen.

Använd waitkey() funktion genom att skicka 0 för att visa originalbildfönstret och det genererade skissfönstret tills du trycker på valfri tangent.

cv2.imwrite("sketch.jpeg", skiss)
bild = cv2.imread("sketch.jpeg")
fönsternamn ="Skissa bild"
cv2.imshow (fönsternamn, bild)
cv2.waitKey(0)

Ta ihop all kod så har du ditt program redo.

Exempel på utdata för att konvertera en bild till en skiss med detta Python-program

Du kan välja en vacker landskapsbild och köra den genom programmet för att skapa denna fantastiska digitala skiss.

På en porträttbild genererar programmet följande digitala skiss.

Du kan experimentera med parametrarna för funktionen enligt dina önskemål för att skapa din önskade digitala skiss.

Bildbehandling och datorseende

Bildbehandling och datorseende är två närbesläktade teknikområden. De involverar båda att ändra digitala bilder för att få önskat resultat. Bildbehandling fokuserar på att förbättra en bild, medan datorseende söker efter mönster och objekt i en bild för att förstå den.

Scikit-image är ett annat Python-bibliotek som tillhandahåller en mängd olika bildbehandlingsfunktioner. Den har flera förkompilerade moduler, filter, lager, transformationer och mer. Om du letar efter en modul att använda för djupinlärningsmodeller som CNN och RNN kanske du vill utforska Torchvision.