I lettori come te aiutano a sostenere MUO. Quando effettui un acquisto utilizzando i link sul nostro sito, potremmo guadagnare una commissione di affiliazione. Per saperne di più.

Realizzare un bellissimo schizzo richiede molto tempo e impegno. Fortunatamente, la programmazione si è evoluta, quindi ora puoi trasformare facilmente le immagini e creare bellissimi design. Una tecnica impressionante che puoi eseguire è convertire un'immagine in uno schizzo digitale.

Sebbene uno schizzo meccanico non assomiglierà esattamente al tuo disegno a matita, vale comunque la pena sperimentare l'output. Scopri come programmare un'app di questo tipo utilizzando il modulo OpenCV nel super intuitivo linguaggio Python.

Il modulo OpenCV

OpenCV è una libreria open source sviluppata e gestita da Intel di metodi di visione artificiale utilizzati per l'elaborazione delle immagini e la visione artificiale. Rende semplice per gli utenti creare applicazioni ottimizzate, interagire con immagini e video in tempo reale e selezionare l'algoritmo ideale per le loro esigenze.

instagram viewer

Alcune delle applicazioni popolari di OpenCV include il rilevamento dei volti, tracciamento automatico dei volti in cinematografia, filtri dei social media, riconoscimento targhe automobilistichee monitoraggio CCTV. Per utilizzare il modulo OpenCV in Python, apri il tuo terminale e digita il seguente comando:

pip installa opencv-python

Come convertire qualsiasi immagine in uno schizzo usando Python

Per convertire la tua immagine preferita in uno schizzo digitale, inizia inserendola nella stessa cartella di un nuovo programma Python, per un facile riferimento. Quindi inizia a creare il tuo programma utilizzando i seguenti passaggi.

Questo codice di esempio è disponibile in a Deposito GitHub ed è gratuito per l'uso sotto la licenza MIT.

Il primo passo è importare il modulo OpenCV nel tuo ambiente. Una volta che OpenCV è disponibile, puoi utilizzare le sue funzionalità per svolgere varie attività. Passa il percorso del tuo file immagine nel file imread() funzione per caricarlo. Memorizza la tua immagine in una variabile chiamata immagine1 qui, per riferimenti futuri.

Memorizza il titolo della finestra in una variabile denominata nome_finestra. Questo sarà utile quando scegli di visualizzare l'immagine usando il imshow() funzione. Questa funzione richiede due parametri: il titolo e l'immagine che si desidera visualizzare.

importare cv2

image1 = cv2.imread('immagine.jpg')
nome_finestra = 'Immagine reale'
cv2.imshow (nome_finestra, immagine1)

Una volta ottenuta l'immagine desiderata, è necessario eseguire cinque operazioni per trasformarla in uno schizzo. Innanzitutto, converti l'immagine a colori in scala di grigi. Puoi farlo con il cvtColor() funzione. Questa funzione accetta l'immagine di cui si desidera modificare i colori e un codice di conversione come COLORE_BGR2GRIGIO.

gray_img = cv2.cvtColor (immagine1, cv2.COLOR_BGR2GRAY)

Una volta che hai un'immagine in scala di grigi, inverti i suoi colori. A questo punto, devi capire come un computer forma un'immagine. Un'immagine è composta da molti minuscoli pixel con intensità diverse. In un'immagine a colori, ogni pixel contiene componenti rosso, verde e blu, ciascuno con un'intensità che varia da 0 a 255.

In un'immagine in scala di grigi ci sono solo sfumature di grigio, quindi l'intensità di un pixel varia tra 0 e 1. Per invertire le intensità dei pixel di questa immagine, passa l'immagine in scala di grigi al file bitwise_not() funzione.

Come suggerisce il nome, questa funzione inverte il valore di ciascun pixel nel suo equivalente complementare. Tutti i pixel maggiori di 0 vengono impostati su 0 e tutti i pixel uguali a 0 vengono impostati su 255.

inverti = cv2.bitwise_not (grey_img)

Dopo aver invertito le intensità dei pixel, puoi uniformare l'immagine con l'aiuto di Gaussian Blur. Il processo Gaussian Blur utilizza un filtro Gaussian. Un filtro gaussiano è un filtro passa-basso che consente il passaggio solo delle basse frequenze, rimuovendo la componente ad alta frequenza di un segnale o di un'immagine.

OpenCV Sfocatura gaussiana() funzione accetta quattro parametri. Si tratta di un oggetto matrice che funge da immagine sorgente, ksize (dimensione del kernel) e sigmaX (la deviazione standard del kernel gaussiano).

Supponiamo di avere una fotografia fisica in mano. Se volessi sfumarlo, potresti applicare sopra pezzi di cera o carta pergamena. Puoi immaginare il nocciolo come questo pezzo di carta trasparente. Digitalmente, questo accade in modo leggermente diverso. Per sfocare, rendere più nitido e applicare altri effetti su un'immagine digitale, moltiplichi una matrice per l'intensità dei pixel dell'immagine.

Il ksize è sempre un numero dispari positivo. Man mano che aumenti la dimensione del kernel, la sfocatura aumenta. Per capire sigmaX supponi di applicare la cera su una carta. Quando applichi la cera, la carta diventa uniformemente traslucida. Allo stesso modo, devi mantenere i valori del kernel vicini a un punto specifico (la media). Il valore sigmaX definisce la differenza tra la media e gli altri valori dei pixel in un'immagine.

Passa l'immagine invertita, la dimensione del kernel come (21, 21) e 0 deviazione standard alla funzione Sfocatura gaussiana:

sfocatura = cv2.GaussianBlur (inverti, (21, 21), 0)

Passa di nuovo l'immagine sfocata alla funzione bitwise_not() per invertirla:

invertedblur = cv2.bitwise_not (sfocatura)

Infine, usa il dividere() funzione e per eseguire la divisione per elemento dell'array di immagini in scala di grigi e dell'array di immagini sfocate invertite con una scala di 256.

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

Essenzialmente la funzione esegue la seguente operazione:

defdividere(grey_img, b, invertedblur=256.0):
ritorno (grey_img * scale) / sfocatura invertita

Memorizza il risultato in una variabile denominata sketch. Per salvare l'immagine finale, passa un nome per il file di output e l'immagine dello schizzo al file imscrivi() funzione. Per verificarlo, puoi usare la funzione imread() per caricare l'immagine dello schizzo salvata, dare un titolo alla finestra e visualizzarla usando la funzione imshow().

Usa il tasto attesa() funzione passando 0 per visualizzare la finestra dell'immagine originale e la finestra dello schizzo generato finché non si preme un tasto qualsiasi.

cv2.imwrite("schizzo.jpeg", schizzo)
immagine = cv2.imread("schizzo.jpeg")
nome_finestra ='Immagine schizzo'
cv2.imshow (nome_finestra, immagine)
cv2.waitKey(0)

Metti insieme tutto il codice e hai il tuo programma pronto.

Esempio di output della conversione di un'immagine in uno schizzo utilizzando questo programma Python

Puoi scegliere una bellissima immagine di paesaggio ed eseguirla attraverso il programma per generare questo straordinario schizzo digitale.

Su un'immagine verticale, il programma genera il seguente schizzo digitale.

Puoi sperimentare i parametri della funzione in base alle tue preferenze per generare lo schizzo digitale desiderato.

Elaborazione delle immagini e visione artificiale

L'elaborazione delle immagini e la visione artificiale sono due campi della tecnologia strettamente correlati. Entrambi implicano l'alterazione delle immagini digitali per ottenere i risultati desiderati. L'elaborazione delle immagini si concentra sul miglioramento di un'immagine, mentre la visione artificiale cerca di trovare modelli e oggetti all'interno di un'immagine per comprenderla.

Scikit-image è un'altra libreria Python che fornisce un'ampia varietà di funzioni di elaborazione delle immagini. Ha diversi moduli precompilati, filtri, livelli, trasformazioni e altro. Se stai cercando un modulo da utilizzare per modelli di deep learning come CNN e RNN, potresti voler esplorare Torchvision.