Converti qualsiasi immagine in uno schizzo usando Python

Converti qualsiasi immagine in uno schizzo usando Python

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.

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

pip install 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.

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 nella funzione imread() per caricarlo. Memorizza la tua immagine in una variabile, chiamata image1 qui, per riferimento futuro.

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

import cv2

image1 = cv2.imread('image.jpg')
window_name = 'Actual image'
cv2.imshow(window_name, image1)

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 la funzione cvtColor() . Questa funzione accetta l’immagine di cui si desidera modificare i colori e un codice di conversione come COLOR_BGR2GRAY .

grey_img = cv2.cvtColor(image1, 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 alla funzione bitwise_not() .

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.

invert = 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.

La funzione GaussianBlur() di OpenCV 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:

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

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

invertedblur = cv2.bitwise_not(blur)

Infine, usa la funzione divide() e per eseguire la divisione per elemento dell’array di immagini in scala di grigi e dell’array di immagini di sfocatura invertita con una scala di 256.

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

Essenzialmente la funzione esegue la seguente operazione:

def divide(grey_img, b, invertedblur=256.0):
    return (grey_img * scale) / invertedblur

Memorizza il risultato in una variabile denominata sketch. Per salvare l’immagine finale, passare un nome per il file di output e l’immagine dello schizzo alla funzione imwrite() . 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().

Utilizzare la funzione waitkey() passando 0 per visualizzare la finestra dell’immagine originale e la finestra dello schizzo generata finché non si preme un tasto qualsiasi.

cv2.imwrite("sketch.jpeg", sketch)
image = cv2.imread("sketch.jpeg")
window_name ='Sketch image'
cv2.imshow(window_name, image)
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.

Immagine per disegnare la casa con il lago

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

Immagine per disegnare l'uomo

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *