Es wird immer mehr.
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 ↓ |
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.
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()
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.
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.
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
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.
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.
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()
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
Nun, die Quelle dafür ... die Ränder hier sind zu eng, um es zu schreiben.
OpenCV ist interessant, aber ich muss so schnell wie möglich Deep Learning studieren, was die Hauptgeschichte ist.
Recommended Posts