[PYTHON] Größenänderung, Mosaik, Gesichtserkennung mit OpenCV, manchmal Elefantenstempel

Einführung

Es wird immer mehr.

Größe ändern cv2.resize (src, dsize, fx, fy, Interpolation)

Es gibt zwei Möglichkeiten, die Bildgröße in OpenCV festzulegen. Vergrößerungs- und Größenangaben.

Der Unterschied ist im Hintergrund und in den JPEG-Bildern von Personen schwer zu erkennen, im Punktbild jedoch deutlich.

Das Originalbild cv2.INTER_LINEAR cv2.INTER_NEAREST
Ich bin hier

dote.png
INTER_LINEAR.png INTER_NEAREST.png

Denken Sie beim Trimmen daran, img [r: r + h, c: c + w] in der Reihenfolge der Zeilen und Spalten zu schreiben, da es sich um eine Matrix handelt. Die Größenänderung hat jedoch nichts mit der Matrix zu tun, daher lautet die Reihenfolge (w, h). Das ist verwirrend. Es ist auch verwirrend, dass die Größe beschrieben werden muss, auch wenn die Vergrößerung angegeben ist, und es ist erforderlich, Keine zu schreiben.

Grundprogramm

resize.py


import cv2

filename = "hoge.jpg "
img = cv2.imread(filename)

fx, fy = 3.5, 2  #Die Vergrößerung kann gering sein

#Wie mit dsize angeben
h, w = img.shape[:2]
h_resize, w_resize = round(h*fy), round(w*fx)  #Größe ist Ganzzahl
img_resize = cv2.resize(img, dsize=(w_resize, h_resize) ,interpolation=cv2.INTER_LINEAR)

# fx,Wie mit fy angeben
#img_resize = cv2.resize(img, dsize=(0,0), fx=fx, fy=fy ,interpolation=cv2.INTER_LINEAR)

#Dies führt zu einem Fehler
#img_resize = cv2.resize(img, fx=fx, fy=fy ,interpolation=cv2.INTER_LINEAR)

cv2.imshow("originai image",img)
cv2.imshow("resized image",img_resize)
cv2.waitKey(0)
cv2.destroyAllWindows()

Mosaik-

Mosaic hat keine spezielle Methode zum Aufbringen eines Mosaiks. Sie müssen es nur verkleinern und auf die ursprüngliche Größe ändern. Natürlich mit cv2.INTER_NEAREST.

Anwendungsbeispiel 1 Fokus mit Hinweisen

Wenn Sie das Mosaik allmählich dichter machen, können Sie ein Quiz wie einen Fokus mit Hinweisen erstellen. In der folgenden Quelle wird der Teil, der ein animiertes GIF erstellt, weggelassen. Tippen Sie daher entsprechend auf die Taste.

hinto_de_pinto.py


import cv2

filename = "hoge.jpg "
img_origin = cv2.imread(filename)
imgH, imgW = img_origin.shape[:2]

i = 2
isComplete = False
while not isComplete:
    ratio = 1/2**(8-i*0.6)  #Ich mache eine heikle Berechnung, aber bitte ändern Sie sie frei
    print (ratio)
    if ratio > 0.7:
        img_mosaic = img_origin
        isComplete = True
    else :
        img_mosaic = cv2.resize(img_origin, dsize=None ,fx=ratio, fy=ratio)
        img_mosaic = cv2.resize(img_mosaic, dsize=(imgW, imgH),
                                interpolation=cv2.INTER_NEAREST)
    cv2.imshow("mosaic", img_mosaic)
    cv2.waitKey(0)
    i += 1
    
cv2.destroyAllWindows()

Das Originalbild ist wie gewohnt Skimanas. hinto_de_pinto.gif

Gesichtserkennung

Die Gesichtserkennung ist mit dem OpenCV-Kaskadenklassifikator möglich. Es gibt viele Klassifikatoren im Netz, und Sie können auch Ihre eigenen erstellen.

Hier ist eine Referenz für den Mechanismus. [Erklärung für Anfänger] OpenCV-Gesichtserkennungsmechanismus und -praxis (MultiScale erkennen)  https://qiita.com/FukuharaYohei/items/ec6dce7cc5ea21a51a82

Grundprogramm

face_detect.py


import cv2

filename = "hoge.jpg "
img_origin = cv2.imread(filename)
img_gray= cv2.cvtColor(img_origin, cv2.COLOR_BGR2GRAY) #Graustufen für Geschwindigkeit

# https://github.com/opencv/opencv/tree/master/data/Holen Sie sich Kaskadendateien von Haarkaskaden
cascade_path = "./models/haarcascade_frontalface_alt2.xml"
cascade = cv2.CascadeClassifier(cascade_path)
faces = cascade.detectMultiScale(img_gray)

print (faces)

Bisher wurden verschiedene Parameter beschrieben, hier werden jedoch nur die Ausgabeergebnisse beschrieben. Zuallererst das Originalbild, das ich vorher nicht vorgestellt habe.

nurse.jpg

Das Ausführen des Programms auf diesem Image führt zu folgenden Ergebnissen:

Ergebnis


[[374  78  88  88]
 [137  90 127 127]]

Offizielle Referenz sagt nur "Liste der Rechtecke", schreibt aber genauer. Und ** eine Liste von "einer Liste erkannter Rechtecke, die in der Reihenfolge x, y, w, h gespeichert sind" **. Denken Sie daran, dass die Klammern verdoppelt werden, auch wenn nur ein Erkennungsergebnis vorliegt, da es sich um eine Liste von Listen handelt.

Anwendungsbeispiel 2 Mosaik in Verbindung mit Gesichtserkennung

Apropos Gesichtserkennung: Wir sehen häufig Programme, die den erkannten Bereich in einem Quadrat einschließen. Wenn Sie jedoch die Ausgabe verstehen, ist es einfach, ein Mosaik zu erstellen. Der lachende Mann wird es bald für das von der Kamera aufgenommene Video anstelle des Bildes tun können. Ich habe noch nie ein Shell Corps gesehen.

rectangle_and_mosaic.py


import cv2

filename = "hoge.jpg "
img_origin = cv2.imread(filename)
img_gray = cv2.imread(filename,0)  #Es gibt auch eine Möglichkeit, Graustufen zu lesen, anstatt mit cvtColor zu konvertieren

# img_origin.copy()Nicht img_Mal sehen, was mit dem Ursprung selbst passiert
img_rect = img_origin.copy()
img_mosaic = img_origin.copy()

cascade_path = "./models/haarcascade_frontalface_alt2.xml"
cascade = cv2.CascadeClassifier(cascade_path)
faces = cascade.detectMultiScale(img_gray)

if len(faces) > 0:
    for face in faces:
        x, y, w, h = face

        #Schließen Sie den erkannten Gesichtsbereich mit einem Quadrat ein
        img_rect = cv2.rectangle(img_rect, (x, y), (x+w, y+h), color=(255, 255, 255), thickness=2)

        #Mosaik des erkannten Gesichtsbereichs
        roi = img_mosaic[y:y+h, x:x+w]
        roi = cv2.resize(roi, (w//10, h//10))
        roi = cv2.resize(roi, (w, h), interpolation=cv2.INTER_NEAREST)
        img_mosaic[y:y+h, x:x+w] = roi               

cv2.imshow("face originai", img_origin)
cv2.imshow("face rectangle", img_rect)
cv2.imshow("face mosaic", img_mosaic)
cv2.waitKey(0)
cv2.destroyAllWindows()

face detection_rect.jpg face detection_mosaic.jpg

Anwendungsbeispiel 3 Spiegel, der dünn aussieht

Ich habe mir einen dünn aussehenden Spiegel ausgedacht, der Gesichtserkennung und Skalierung verwendet. Ich hatte die Illusion, dass es bei Highschool-Mädchen im ganzen Land sehr beliebt wäre, wenn ich eine Smartphone-App herausbringen würde, mit der ich durch Ein- und Ausklemmen abnehmen und zunehmen kann, aber leider hatte ich nicht die Technologie, um eine Smartphone-App zu erstellen. Oder besser gesagt, es hatte eine ähnliche Funktion wie SNOW. Ich denke nicht, dass die Schönheitsfunktion von SNOW so einfach ist.

Oben: Originalbild (Pakutaso) Medium: Nach der Verarbeitung Unten: Ein animiertes GIF in gutem Zustand

original.jpg slim80.png slim.gif

Nun, die Quelle dafür ... die Ränder hier sind zu eng, um es zu schreiben.

Am Ende

OpenCV ist interessant, aber ich muss so schnell wie möglich Deep Learning studieren, was die Hauptgeschichte ist.

Recommended Posts

Größenänderung, Mosaik, Gesichtserkennung mit OpenCV, manchmal Elefantenstempel
Gesichtserkennung mit Python + OpenCV
Anime-Gesichtserkennung mit OpenCV
Gesichtserkennung mit Python + OpenCV (invariante Rotation)
Hallo Welt- und Gesichtserkennung mit OpenCV 4.3 + Python
Gesichtserkennung mit OpenCV von Python
Versuchen Sie die Kantenerkennung mit OpenCV
Gesichtserkennung mit Python + dlib
Echtzeit-Kantenerkennung mit OpenCV
Gesichtserkennung / Schneiden mit OpenCV
Gesichtserkennung mit Haar Cascades
Verbessern Sie schnell die Erkennungsgenauigkeit, indem Sie Parameter mit openCV-Gesichtserkennung angeben
Gesichtserkennung mit YOLO Face (Windows10, Python3.6)
Gesichtserkennung mit Lambda (Python) + Erkennung
[Python] Verwenden von OpenCV mit Python (Kantenerkennung)
[OpenCV] Persönliche Identifikation mit Gesichtsfoto
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Ich habe versucht, das Gesicht mit MTCNN zu erkennen
OpenCV-Funktionserkennung mit Google Colaboratory
Katzenerkennung mit OpenCV (Modellverteilung)
Ich habe versucht, das Gesicht mit OpenCV zu erkennen
Hallo Welt- und Gesichtserkennung mit opencv-python 4.2
[Python] Gesichtserkennung durch OpenCV (Haar Cascade)
Gesichtserkennung aus mehreren Bilddateien mit openCV, ausschneiden und speichern
[python, openCV] base64 Gesichtserkennung in Bildern
Leistungsvergleich des Gesichtsdetektors mit Python + OpenCV
[Ubuntu] [Python] Vergleich der Gesichtserkennung zwischen dlib und OpenCV