Wasserzeichenbilder mit OpenCV | So markieren Sie ein Bild mit OpenCV

Inhalt

Dieser Artikel wurde im Rahmen der Data Science Blogathon

In diesem Artikel, Wir werden lernen, wie man mehrere Bilder mit OpenCV mit Wasserzeichen markiert.

Zu behandelnde Themen:

  1. Was ist ein Wasserzeichen??
  2. Ändern Sie die Größe von Bildern in OpenCV
  3. Wasserzeichen mit einem Bild erstellen

1. Was ist ein Wasserzeichen??

Ein Wasserzeichen ist ein Logo, Gesellschaft, Text oder Muster, das absichtlich über verschiedene Bilder gelegt wird und zum Schutz des Bildrechtes verwendet wird.

Sein Hauptzweck besteht darin, eine Marke zu fördern und das Kopieren oder Verwenden des Originalbilds ohne die Erlaubnis des Eigentümers zu erschweren..

Professionelle Organisationen verwenden häufig Wasserzeichen, um zu verhindern, dass andere ihre Inhalte verwenden, nachdem sie sie online gehostet haben..

Dann, Haben Sie jemals darüber nachgedacht, Ihren Bildern ein Wasserzeichen hinzuzufügen?? Gut, ich tat es.

Zum Beispiel, Wir schreiben Blogs und erwähnen die Quelle externer Bilder. Aber, Was ist mit den Bildern, die Sie selbst erstellen?? Wäre es nicht schön, ihre Spuren zu hinterlassen?

Hurra! Los geht's mit dieser spannenden Aufgabe.

2. Ändern Sie die Größe von Bildern in OpenCV

Die Größenänderung ist nichts anderes als das Skalieren des Bildes, was es bedeutet, die Größe des Originalbilds zu ändern. Wir können die Größe des Bildes je nach Geschäftsanforderungen vergrößern oder verkleinern.

Die Größenänderung kann auf verschiedene Arten erfolgen.

1. Seitenverhältnis beibehalten. Das Seitenverhältnis eines Bildes ist das Verhältnis seiner Breite zu seiner Höhe.

  • Verkleinern oder vergrößern Sie die Bildgröße

2. Behält das Seitenverhältnis nicht bei

  • Nur Schrumpfbreite / Zunahme, nur Schrumpfhöhe / Zunahme

3. Ändern Sie sowohl Breite als auch Höhe auf bestimmte Werte

Klingt soweit super, aber wie machen wir das in der Praxis? Die Antwort ist OpenCV und seine Größenänderungsfunktion (). Lesen Sie mehr über die Größenänderungsfunktion von OpenCV in diesem Dokumentation.

Syntax der Funktion Cv2.resize ():
cv2.resize (src, Größe, Interpolation)

  • src – Quellbild
  • Größe: die gewünschte Größe des Ausgabebildes
  • Interpolation – Wikipedia-Definition: Es ist eine Methode zum Bauen (finden) neue Datenpunkte basierend auf dem Bereich eines diskreten Satzes bekannter Datenpunkte.

Sehen Sie sich diese Dokumentation an, um mehr darüber zu erfahren Interpolationsflags.

Jetzt, lass uns ein Beispielbild machen und seine Größe ändern. Unten ist unser Beispielbild.

44364Hirsch-9418003
Bild des Autors

Jetzt, versuche es mit OpenCV . anzuzeigen.

  1. CV2 importieren
    img = cv2.imread('Bilder/Hirsch.JPG')
    cv2.imshow("Original Bild", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

Unten sehen Sie, wie unser Bild aussieht, wenn es mit OpenCV angezeigt wird. Da unser Bild hochauflösend ist, nur ein Teil davon ist sichtbar.

79507Hirsch20before20Größenänderung-8155746

Dann, die Größe muss auf jeden Fall geändert werden. Wir müssen seine Größe verringern.

Schritte zum Ändern der Bildgröße in OpenCV:

  • Lesen Sie das Bild mit cv2.imread ()
  • Legen Sie die neue Breite und Höhe fest.
  • Erstellen Sie ein Tupel für die neuen Dimensionen
  • Bildgröße mit cv2.resize . ändern ()
  • Falls erforderlich, Speichern Sie das Bild mit geänderter Größe auf dem Computer mit cv2.imwrite ()
  • Zeigen Sie die Originalbilder an, Größenänderung mit cv2.imshow ()

1. Seitenverhältnis beibehalten: reduziert den Abbildungsmaßstab auf 20% seiner ursprünglichen Größe.

(Wir reduzieren die Größe des Originalbilds auf 20% seiner ursprünglichen Größe. Deswegen, wir erstellen ein Tupel für die neuen Dimensionen, indem wir die berechnen 20% der ursprünglichen Breite, das 20% von ursprünglicher Höhe).

  1. CV2 importieren
    img = cv2.imread('Bilder/Hirsch.JPG')
    Prozent_der_Skalierung = 20
    new_width = int(img.shape[1] * Prozent_der_Skalierung/100)
    new_height = int(img.shape[0] * Prozent_der_Skalierung/100)
    new_dim = (neue_breite, neue_höhe)
    resized_img = cv2.resize(img, new_dim, interpolation=cv2.INTER_AREA)
    Dateiname="resized_img_aspect ratio.jpg"
    cv2.imwrite(Dateiname, resized_img)
    cv2.imshow("Original Bild", img)
    cv2.imshow("Bild verkleinert", resized_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

Der obige Code speichert das verkleinerte Bild und zeigt die original verkleinerten Bilder an.

19874verkleinert20Hirsch-1114087

Gut erledigt. Wir haben unser Bild unter Berücksichtigung des Seitenverhältnisses erfolgreich verkleinert.

2. Ohne das Seitenverhältnis beizubehalten: einfach verkleinern / Breite vergrößern, einfach verkleinern / Höhe erhöhen

Die Schritte zum Ändern der Größe sind die gleichen wie oben. Der einzige Unterschied besteht darin, dass wir eine der beiden Dimensionen unverändert lassen.

  1. CV2 importieren
    img = cv2.imread('Bilder/Hirsch.JPG')
    new_dim = (img.shape[1], 500) # ändert die Höhe
    resized_img = cv2.resize(img, new_dim, interpolation=cv2.INTER_AREA)
    cv2.imshow("Original Bild", img)
    cv2.imshow("Bild verkleinert", resized_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

Unten sind die Bilder des obigen Codes gezeigt.

75562verzerrt20hirsch-6442633

Das skalierte Bild ist verzerrt und nicht die gewünschte Ausgabe.

3. Ändern Sie sowohl Breite als auch Höhe auf bestimmte Werte

  1. CV2 importieren
  2. img = cv2.imread ('Bilder / Hirsch.JPG ')
  3. new_dim = (450, 450)
  4. resized_img = cv2.resize (img, new_dim, Interpolation = cv2.INTER_AREA)
  5. cv2.imshow (“Original Bild”, img)
  6. cv2.imshow (“Bild verkleinert”, resized_img)
  7. cv2.waitKey (0)
  8. cv2.destroyAllWindows ()

Unten sind die Bilder des obigen Codes gezeigt.

81666Specific20resize-5118588

Das sieht irgendwie cool aus, aber nicht so gut wie das Ausgabebild mit einem beibehaltenen Seitenverhältnis. Deshalb ziehe ich es vor, die Größe zu ändern, während das Seitenverhältnis beibehalten wird.

Im nächsten Schritt erfahren Sie, wie Sie ein Wasserzeichen erstellen.

Wasserzeichen mit einem Bild erstellen

Ich habe mich entschieden, ein Wasserzeichen mit dem Bild meines Namens zu setzen. Mach ein Bild von deinem Namen und probiere es an mir.

65473Wasserzeichen-3243336
Wasserzeichenbild

Schritte zum Hinzufügen des Wasserzeichens in der Mitte eines Bildes:

Bilder lesen und skalieren (Wasserzeichenbild, Eingabebild) Falls erforderlich.

CV2 importieren
img = cv2.imread('Bilder/Hirsch.JPG')
Wasserzeichen = cv2.imread("Wasserzeichen.PNG")

Prozent_der_Skalierung = 20
new_width = int(img.shape[1] * Prozent_der_Skalierung/100)
new_height = int(img.shape[0] * Prozent_der_Skalierung/100)
new_dim = (neue_breite, neue_höhe)
resized_img = cv2.resize(img, new_dim, interpolation=cv2.INTER_AREA)

wm_scale = 40
wm_width = int(Wasserzeichen.Form[1] * wm_scale/100)
wm_height = int(Wasserzeichen.Form[0] * wm_scale/100)
wm_dim = (wm_width, wm_höhe)
resized_wm = cv2.resize(Wasserzeichen, wm_dim, interpolation=cv2.INTER_AREA)

Definiere das Logoposition entsprechend den neuen Abmessungen des skalierten Eingabebilds.

h_img, w_img, _ = resized_img.shape
center_y = int(h_img/2)
center_x = int(w_img/2)
h_wm, w_wm, _ = resized_wm.shape
top_y = center_y - int(h_wm/2)
left_x = center_x - int(w_wm / 2)
bottom_y = top_y + h_wm
rechts_x = links_x + w_wm

Bekommen das Rechteckiger Interessenbereich (KÖNIG) und speichern Sie es in einer Variablen namens 'roi'.

roi = resized_img[top_y:unten_y, left_x:richtig_x]

Überlagern Sie das skalierte Wasserzeichen mit dem ROI mit cv2.addWeighted ()und speichere es in einer Variablen namens 'result'.

Ergebnis = cv2.addWeighted(König, 1, resized_wm, 0.3, 0)

Jetzt, füge dieses Ergebnis dem skalierten Eingabebild hinzu

resized_img[top_y:unten_y, left_x:richtig_x] = Ergebnis

Speichern Sie das resultierende Bild mit Wasserzeichen auf Ihrem Computer

Dateiname="watermarked_deer.jpg"
cv2.imwrite(Dateiname, resized_img)

Zeigen Sie das resultierende Bild mit Wasserzeichen an

cv2.imshow("Größe des Eingabebilds geändert", resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Dann! Unten ist das resultierende Bild mit Wasserzeichen.

13873watermarked_deer-3759783

Bis jetzt, Wir haben gelernt, wie man ein einzelnes Bild mit einem Wasserzeichen versehen kann. Unser Ziel ist es, mehrere Bilder mit Wasserzeichen zu versehen, Wir müssen eine Liste all dieser Eingabebilder erstellen und sie durchgehen. Unten sind die Bilder, die ich verwenden werde.

63013all_images-1359651

Erstellen Sie eine Liste von Eingabebildern

  1. Importieren von OS
    OrdnerPfad = "Bilder"
    imgList = os.listdir(Ordnerpfad)
    imgListe
61186list20output-3775418

Code zum Wasserzeichen mehrerer Bilder

  1. CV2 importieren
    Wasserzeichen = cv2.imread("Wasserzeichen.PNG")
    wm_scale = 40
    wm_width = int(Wasserzeichen.Form[1] * wm_scale/100)
    wm_height = int(Wasserzeichen.Form[0] * wm_scale/100)
    wm_dim = (wm_width, wm_höhe)
    resized_wm = cv2.resize(Wasserzeichen, wm_dim, interpolation=cv2.INTER_AREA)
    h_wm, w_wm, _ = resized_wm.shape
    
    für Bild in imgList:
        img = cv2.imread(F'{Ordnerpfad}/{Bild}')
        Prozent_der_Skalierung = 20
        new_width = int(img.shape[1] * Prozent_der_Skalierung/100)
        new_height = int(img.shape[0] * Prozent_der_Skalierung/100)
        new_dim = (neue_breite, neue_höhe)
        resized_img = cv2.resize(img, new_dim, interpolation=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
        rechts_x = links_x + w_wm
        roi = resized_img[top_y:unten_y, left_x:richtig_x]
        Ergebnis = cv2.addWeighted(König, 1, resized_wm, 0.3, 0)
        resized_img[top_y:unten_y, left_x:richtig_x] = Ergebnis
        Dateiname = os.path.basename(Bild)
        cv2.imwrite("Bilder mit Wasserzeichen/mit Wasserzeichen_"+Dateiname, resized_img)
        cv2.imshow("Bild mit Wasserzeichen", resized_img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
16658watermarked_all-6649323

Schließlich, Wir sind mit dem Wasserzeichen auf allen Eingabebildern fertig.

Abschließende Anmerkungen:

Danke fürs Lesen bis zum Schluss. Am Ende dieses Artikels, wir sind mit der Arbeit in einigen der OpenCV-Operationen vertraut: mehrere Bilder lesen, Größe ändern und mit Wasserzeichen versehen.

Ich hoffe, es hat Ihnen Spaß gemacht, diesen Artikel zu lesen. Probieren Sie es selbst aus und teilen Sie es gerne mit Ihren Kommilitonen..

Verweise:

OpenCV-Dokumentation

Laden Sie dazu die Codedatei herunter GitHub-Repository-Link.

Andere Blogbeiträge von mir

Schauen Sie sich gerne auch meine anderen Blog-Beiträge von meinem DataPeaker-Profil an.

Du findest mich in LinkedIn, Twitter falls du dich verbinden möchtest. Ich würde mich gerne mit dir verbinden.

Für einen sofortigen Gedankenaustausch, schreibe mir [E-Mail geschützt].

Die in diesem Artikel gezeigten Medien sind nicht Eigentum von DataPeaker und werden nach Ermessen des Autors verwendet.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.