Filigrana immagini utilizzando OpenCV | Come contrassegnare un'immagine con OpenCV

Contenuti

Questo articolo è stato pubblicato nell'ambito del Blogathon sulla scienza dei dati

In questo articolo, impareremo come filigranare più immagini usando OpenCV.

Argomenti da trattare:

  1. Che cos'è una filigrana?
  2. Ridimensiona le immagini in OpenCV
  3. Crea filigrana usando un'immagine

1. Che cos'è una filigrana?

Una filigrana è un logo, Società, testo o motivo che viene intenzionalmente sovrapposto a immagini diverse e viene utilizzato per proteggere il copyright dell'immagine.

Il suo scopo principale è promuovere un marchio e rendere difficile la copia o l'utilizzo dell'immagine originale senza il permesso del proprietario..

Le organizzazioni professionali utilizzano spesso filigrane per impedire ad altri di utilizzare i propri contenuti dopo averli ospitati online..

Quindi, Hai mai pensato di aggiungere una filigrana alle tue immagini?? Bene, l'ho fatto.

Ad esempio, scriviamo blog e menzioniamo la fonte delle immagini esterne. Ma, Che dire delle immagini che crei da solo?? Non sarebbe bello lasciare il tuo segno su di loro?

evviva! Iniziamo con questo compito entusiasmante.

2. Ridimensiona le immagini in OpenCV

Il ridimensionamento non è altro che ridimensionare l'immagine, cosa significa ridimensionare l'immagine originale. Possiamo aumentare o diminuire la dimensione dell'immagine in base ai requisiti aziendali.

Il ridimensionamento può essere eseguito in vari modi.

1. Mantieni proporzioni. Il rapporto di aspetto di un'immagine è il rapporto tra la sua larghezza e la sua altezza.

  • Riduci o ingrandisci la dimensione dell'immagine

2. Non conserva le proporzioni

  • Solo larghezza di restringimento / aumento, restringere solo l'altezza / aumento

3. Cambia sia la larghezza che l'altezza in valori specifici

Sembra fantastico finora, ma come lo facciamo in pratica? La risposta è OpenCV e la sua funzione di ridimensionamento (). Leggi di più sulla funzione di ridimensionamento di OpenCV in questo documentazione.

Sintassi della funzione Cv2.resize ():
cv2.resize (src, taglia grande, interpolazione)

  • src – immagine sorgente
  • taglia grande: la dimensione desiderata dell'immagine di output
  • interpolazione – Definizione di Wikipedia: È un metodo per costruire (trova) nuovi punti dati basati sull'intervallo di un insieme discreto di punti dati noti.

Dai un'occhiata a questa documentazione per saperne di più flag di interpolazione.

Ora, facciamo una foto di esempio e cambiamo le sue dimensioni. Di seguito è riportata la nostra immagine di esempio.

44364cervo-9418003
Immagine dell'autore

Ora, prova a visualizzarlo usando OpenCV.

  1. importa cv2
    img = cv2.imread('immagini/cervo.JPG')
    cv2.imshow("Immagine originale", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

Di seguito è riportato come appare la nostra immagine quando viene visualizzata utilizzando OpenCV. Como nuestra imagen es de alta risoluzione, ne è visibile solo una parte.

79507cervo20before20ridimensionamento-8155746

Quindi, c'è sicuramente bisogno di ridimensionarlo. Dobbiamo ridurne le dimensioni.

Passaggi per ridimensionare un'immagine in OpenCV:

  • Leggi l'immagine usando cv2.imread ()
  • Imposta la nuova larghezza e altezza.
  • Crea una tupla per le nuove dimensioni
  • Ridimensiona l'immagine usando cv2.resize ()
  • Se richiesto, salva l'immagine ridimensionata sul computer usando cv2.imwrite ()
  • Mostra le immagini originali, ridimensionato usando cv2.imshow ()

1. Mantieni proporzioni: riduce la scala dell'immagine a 20% della sua dimensione originale.

(Stiamo riducendo le dimensioni dell'immagine originale a 20% della sua dimensione originale. Perciò, Creeremo una tupla per le nuove dimensioni calcolando il 20% di larghezza originale, il 20% di altezza originale).

  1. importa cv2
    img = cv2.imread('immagini/cervo.JPG')
    percent_of_scaling = 20
    new_width = intero(img.forma[1] * percent_of_scaling/100)
    nuova_altezza = int(img.forma[0] * percent_of_scaling/100)
    new_dim = (new_width, nuova_altezza)
    resized_img = cv2.resize(img, new_dim, interpolazione=cv2.INTER_AREA)
    nome file="resized_img_aspect ratio.jpg"
    cv2.imwrite(nome del file, ridimensionato_img)
    cv2.imshow("Immagine originale", img)
    cv2.imshow("Immagine ridimensionata", ridimensionato_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

Il codice sopra salva l'immagine ridimensionata e visualizza le immagini ridimensionate originali.

19874ridimensionato20deer-1114087

Molto bene. Abbiamo ridimensionato con successo la nostra immagine tenendo conto delle proporzioni.

2. Senza preservare le proporzioni: solo rimpicciolire / aumentare la larghezza, solo rimpicciolire / aumentare l'altezza

I passaggi per il ridimensionamento saranno gli stessi di sopra. L'unica differenza è che manteniamo invariata una delle due dimensioni.

  1. importa cv2
    img = cv2.imread('immagini/cervo.JPG')
    new_dim = (img.forma[1], 500) # cambia altezza
    resized_img = cv2.resize(img, new_dim, interpolazione=cv2.INTER_AREA)
    cv2.imshow("Immagine originale", img)
    cv2.imshow("Immagine ridimensionata", ridimensionato_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

Di seguito sono riportate le immagini mostrate del codice sopra.

75562distorto20deer-6442633

L'immagine ridimensionata è distorta e non l'output desiderato.

3. Cambia sia la larghezza che l'altezza in valori specifici

  1. importa cv2
  2. img = cv2.imread ('immagini / cervo.JPG ')
  3. new_dim = (450, 450)
  4. resized_img = cv2.resize (img, new_dim, interpolazione = cv2.INTER_AREA)
  5. cv2.imshow (“Immagine originale”, img)
  6. cv2.imshow (“immagine ridimensionata”, ridimensionato_img)
  7. cv2.waitKey (0)
  8. cv2.destroyAllWindows ()

Di seguito sono riportate le immagini mostrate del codice sopra.

81666specific20resize-5118588

Questo sembra un po' figo, ma non buono come l'immagine di output con proporzioni preservate. Ecco perché preferisco ridimensionare preservando le proporzioni.

Il prossimo passo è vedere come creare una filigrana.

Crea filigrana usando un'immagine

Ho scelto di mettere una filigrana con l'immagine del mio nome. Fai una foto del tuo nome e provalo su di me.

65473filigrana-3243336
Immagine filigrana

Passaggi per aggiungere la filigrana al centro di un'immagine:

Leggi e ridimensiona le immagini (immagine filigrana, immagine in ingresso) se richiesto.

importa cv2
img = cv2.imread('immagini/cervo.JPG')
filigrana = cv2.imread("filigrana.PNG")

percent_of_scaling = 20
new_width = intero(img.forma[1] * percent_of_scaling/100)
nuova_altezza = int(img.forma[0] * percent_of_scaling/100)
new_dim = (new_width, nuova_altezza)
resized_img = cv2.resize(img, new_dim, interpolazione=cv2.INTER_AREA)

wm_scale = 40
wm_width = intero(filigrana.forma[1] * wm_scale/100)
wm_height = int(filigrana.forma[0] * wm_scale/100)
wm_dim = (wm_width, wm_altezza)
resized_wm = cv2.resize(filigrana, wm_dim, interpolazione=cv2.INTER_AREA)

Definisci il posizione del logo in base alle nuove dimensioni dell'immagine di input ridimensionata.

h_img, w_img, _ = resized_img.shape
center_y = int(h_img/2)
center_x = int(w_img/2)
h_wm, w_wm, _ = ridimensionato_wm.shape
top_y = center_y - int(h_wm / 2)
left_x = center_x - int(w_wm / 2)
bottom_y = top_y + h_wm
x_destra = x_sinistra + w_wm

Ottenere l Regione di interesse rettangolare (RE) y almacenarlo en una variabile llamada ‘roi’.

roi = resized_img[top_y:bottom_y, sinistra_x:destra_x]

Sovrapponi la filigrana ridimensionata alla ROI usando cv2.addWeighted ()e memorizzalo in una variabile chiamata 'risultato'.

risultato = cv2.addWeighted(re, 1, ridimensionato_wm, 0.3, 0)

Ora, aggiungi questo risultato all'immagine di input ridimensionata

ridimensionato_img[top_y:bottom_y, sinistra_x:destra_x] = risultato

Salva l'immagine con filigrana risultante sul tuo computer

nome file="watermarked_deer.jpg"
cv2.imwrite(nome del file, ridimensionato_img)

Visualizza l'immagine filigranata risultante

cv2.imshow("Immagine di input ridimensionata", ridimensionato_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Quindi! Di seguito è riportata l'immagine filigranata risultante.

13873watermarked_deer-3759783

Fino ad ora, abbiamo imparato a mettere una filigrana su una singola immagine. Poiché il nostro obiettivo è filigranare più immagini, dobbiamo creare un elenco di tutte quelle immagini di input e scorrerle in sequenza. Di seguito sono le immagini che userò.

63013all_images-1359651

Crea un elenco di immagini di input

  1. importare il sistema operativo
    percorsocartella = "immagini"
    imgList = os.listdir(percorsocartella)
    imgList
61186list20output-3775418

Codice per filigranare più immagini

  1. importa cv2
    filigrana = cv2.imread("filigrana.PNG")
    wm_scale = 40
    wm_width = intero(filigrana.forma[1] * wm_scale/100)
    wm_height = int(filigrana.forma[0] * wm_scale/100)
    wm_dim = (wm_width, wm_altezza)
    resized_wm = cv2.resize(filigrana, wm_dim, interpolazione=cv2.INTER_AREA)
    h_wm, w_wm, _ = ridimensionato_wm.shape
    
    per l'immagine in imgList:
        img = cv2.imread(F'{percorsocartella}/{Immagine}')
        percent_of_scaling = 20
        new_width = intero(img.forma[1] * percent_of_scaling/100)
        nuova_altezza = int(img.forma[0] * percent_of_scaling/100)
        new_dim = (new_width, nuova_altezza)
        resized_img = cv2.resize(img, new_dim, interpolazione=cv2.INTER_AREA)
        h_img, w_img, _ = resized_img.shape
        center_y = int(h_img/2)
        center_x = int(w_img/2)
        top_y = center_y - int(h_wm / 2)
        left_x = center_x - int(w_wm / 2)
        bottom_y = top_y + h_wm
        x_destra = x_sinistra + w_wm
        roi = resized_img[top_y:bottom_y, sinistra_x:destra_x]
        risultato = cv2.addWeighted(re, 1, ridimensionato_wm, 0.3, 0)
        ridimensionato_img[top_y:bottom_y, sinistra_x:destra_x] = risultato
        nomefile = os.path.basename(Immagine)
        cv2.imwrite("immagini con filigrana/filigrana_"+nome del file, ridimensionato_img)
        cv2.imshow("Immagine con filigrana", ridimensionato_img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
16658watermarked_all-6649323

Finalmente, abbiamo finito con la filigrana su tutte le immagini di input.

Note finali:

Grazie per aver letto fino alla conclusione. Alla fine di questo articolo, abbiamo familiarità con il lavoro in alcune delle operazioni OpenCV: leggi più immagini, ridimensionarli e filigranarli.

Spero che ti sia piaciuto leggere questo articolo. Provalo da solo e sentiti libero di condividerlo con i tuoi compagni studenti..

Riferimenti:

Documentazione OpenCV

Scarica il file di codice per questo Collegamento al repository GitHub.

Altri miei post sul blog

Sentiti libero di dare un'occhiata agli altri post del mio blog dal mio profilo DataPeaker.

Mi puoi trovare in LinkedIn, Twitter nel caso volessi connetterti. Mi piacerebbe connettermi con te.

Per un immediato scambio di opinioni, Scrivimi [e-mail protetta].

Il supporto mostrato in questo articolo non è di proprietà di DataPeaker e viene utilizzato a discrezione dell'autore.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.