Lezers zoals jij steunen MUO. Wanneer u een aankoop doet via links op onze site, kunnen we een aangesloten commissie verdienen. Lees verder.

Het maken van een mooie schets kost veel tijd en moeite. Gelukkig is de programmering geëvolueerd, zodat je nu eenvoudig afbeeldingen kunt transformeren en prachtige ontwerpen kunt maken. Een indrukwekkende techniek die u kunt uitvoeren, is het omzetten van een afbeelding in een digitale schets.

Hoewel een mechanische schets er niet precies uitziet als je eigen potloodtekening, is de uitvoer toch de moeite waard om mee te experimenteren. Leer hoe je zo'n app programmeert met behulp van de OpenCV-module in de supervriendelijke Python-taal.

De OpenCV-module

OpenCV is een door Intel ontwikkelde en onderhouden open-sourcebibliotheek van computervisiemethoden die worden gebruikt voor beeldverwerking en computervisie. Het maakt het voor gebruikers eenvoudig om geoptimaliseerde applicaties te maken, in realtime met afbeeldingen en video's te communiceren en het ideale algoritme voor hun behoeften te selecteren.

instagram viewer

Enkele van de populaire toepassingen van OpenCV omvat gezichtsherkenning, automatische face-tracking in cinematografie, filters voor sociale media, kentekenherkenning auto, en CCTV-bewaking. Om de OpenCV-module in Python te gebruiken, opent u uw terminal en typt u de volgende opdracht:

pip installeer opencv-python

Hoe elke afbeelding in een schets te converteren met behulp van Python

Om uw favoriete afbeelding om te zetten in een digitale schets, plaatst u deze eerst in dezelfde map als een nieuw Python-programma, zodat u er gemakkelijk naar kunt verwijzen. Begin vervolgens met het bouwen van uw programma met behulp van de volgende stappen.

Deze voorbeeldcode is beschikbaar in een GitHub-opslagplaats en is gratis voor u om te gebruiken onder de MIT-licentie.

De eerste stap is het importeren van de OpenCV-module in uw omgeving. Zodra OpenCV beschikbaar is, kunt u de functionaliteit ervan gebruiken om verschillende taken uit te voeren. Geef het pad van uw afbeeldingsbestand door aan het niet gelezen() functie om het te laden. Sla uw afbeelding op in een variabele genaamd afbeelding1 hier - voor toekomstig gebruik.

Sla de titel van het venster op in een variabele met de naam vensternaam. Dit is handig wanneer u ervoor kiest om de afbeelding weer te geven met behulp van de imshow() functie. Deze functie vereist twee parameters: de titel en de afbeelding die u wilt weergeven.

importeren cv2

afbeelding1 = cv2.imread('afbeelding.jpg')
vensternaam = 'Actueel beeld'
cv2.imshow (vensternaam, afbeelding1)

Zodra u de gewenste afbeelding hebt, moet u vijf bewerkingen uitvoeren om deze in een schets om te zetten. Zet eerst de kleurenafbeelding om in grijstinten. Dat kan met de cvtKleur() functie. Deze functie neemt de afbeelding op waarvan u de kleuren wilt wijzigen en een conversiecode zoals KLEUR_BGR2GRIJS.

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

Zodra u een afbeelding in grijstinten hebt, keert u de kleuren om. Op dit punt moet u begrijpen hoe een computer een afbeelding vormt. Een afbeelding bestaat uit vele kleine pixels met verschillende intensiteiten. In een kleurenafbeelding bevat elke pixel rode, groene en blauwe componenten, elk met een intensiteit die varieert van 0 tot 255.

In een grijswaardenafbeelding zijn er alleen grijstinten, dus de intensiteit van een pixel varieert tussen 0 en 1. Om de pixelintensiteiten van deze afbeelding om te keren, geeft u de grijswaardenafbeelding door aan de bitsgewijze_niet() functie.

Zoals de naam al doet vermoeden, keert deze functie de waarde van elke pixel om naar zijn complementaire equivalent. Alle pixels die groter zijn dan 0 worden ingesteld op 0 en alle pixels die gelijk zijn aan 0 worden ingesteld op 255.

omkeren = cv2.bitwise_not (grijze_img)

Na het omkeren van de pixelintensiteiten kunt u het beeld vloeiender maken met behulp van Gaussiaanse vervaging. Het proces Gaussiaans vervagen maakt gebruik van een Gaussiaans filter. Een Gaussiaans filter is een laagdoorlaatfilter dat alleen lage frequenties doorlaat, waardoor de hoogfrequente component van een signaal of een afbeelding wordt verwijderd.

Open CV's Gaussiaans vervagen() functie accepteert vier parameters. Dit zijn een matrixobject dat fungeert als de bronafbeelding, de ksize (grootte van de kernel) en sigmaX (de Gaussiaanse standaarddeviatie van de kernel).

Stel dat je een fysieke foto in je hand hebt. Als je het wilt vervagen, kun je er stukjes was of perkamentpapier overheen doen. Je kunt je de kernel voorstellen als dit doorzichtige stukje papier. Digitaal gaat dat iets anders. Om een ​​digitale afbeelding te vervagen, verscherpen en andere effecten toe te passen, vermenigvuldigt u een matrix met de intensiteit van de pixels van de afbeelding.

De ksize is altijd een positief oneven getal. Naarmate u de kernelgrootte vergroot, neemt de vervaging toe. Om sigmaX te begrijpen, gaan we ervan uit dat u was op papier aanbrengt. Terwijl u was aanbrengt, wordt het papier gelijkmatig doorschijnend. Evenzo moet u de waarden van de kernel dicht bij een bepaald punt (het gemiddelde) houden. De sigmaX-waarde definieert het verschil tussen het gemiddelde en andere waarden van de pixels in een afbeelding.

Geef de omgekeerde afbeelding, de kernelgrootte als (21, 21) en 0 standaarddeviatie door aan de Gaussiaanse vervagingsfunctie:

vervagen = cv2.Gaussiaans vervagen (omkeren, (21, 21), 0)

Geef de vervaagde afbeelding opnieuw door aan de functie bitwise_not() om deze om te keren:

omgekeerde vervaging = cv2.bitwise_not (vervaging)

Gebruik ten slotte de verdeling() functie en om de indeling per element van de grijswaardenbeeldarray en de omgekeerde vervagingsbeeldarray uit te voeren met een schaal van 256.

sketch = cv2.divide (grijze_img, invertedblur, schaal=256.0)

In wezen voert de functie de volgende bewerking uit:

defverdeling(grey_img, b, invertedblur=256.0):
opbrengst (grijs_img * schaal) / invertedblur

Sla het resultaat op in een variabele met de naam sketch. Om de uiteindelijke afbeelding op te slaan, geeft u een naam voor uw uitvoerbestand en de schetsafbeelding door aan de schrijven() functie. Om het te verifiëren, kunt u de imread()-functie gebruiken om de opgeslagen schetsafbeelding te laden, een venstertitel te geven en het weer te geven met de imshow()-functie.

Gebruik de wachttoets() functie door 0 door te geven om het originele afbeeldingsvenster en het gegenereerde schetsvenster weer te geven totdat u op een willekeurige toets drukt.

cv2.imwrite("schets.jpeg", schets)
afbeelding = cv2.imread("schets.jpeg")
vensternaam ='Schetsbeeld'
cv2.imshow (vensternaam, afbeelding)
cv2.waitKey(0)

Breng alle code bij elkaar en je hebt je programma klaar.

Voorbeelduitvoer van het converteren van een afbeelding naar een schets met behulp van dit Python-programma

U kunt een prachtige landschapsafbeelding kiezen en deze door het programma laten lopen om deze verbluffende digitale schets te genereren.

Op een staande afbeelding genereert het programma de volgende digitale schets.

U kunt naar wens experimenteren met de parameters van de functie om uw gewenste digitale schets te genereren.

Beeldverwerking en computervisie

Beeldverwerking en computervisie zijn twee nauw verwante gebieden van technologie. Ze omvatten beide het wijzigen van digitale afbeeldingen om de gewenste resultaten te krijgen. Beeldverwerking richt zich op het verbeteren van een afbeelding, terwijl computervisie patronen en objecten in een afbeelding probeert te vinden om deze te begrijpen.

Scikit-image is een andere Python-bibliotheek die een breed scala aan beeldverwerkingsfuncties biedt. Het heeft verschillende voorgecompileerde modules, filters, lagen, transformaties en meer. Als u op zoek bent naar een module om te gebruiken voor deep learning-modellen zoals CNN en RNN, wilt u misschien Torchvision verkennen.