Hands-on-Artikel, um zurückzublicken und das durch die Entwicklung von Serverless Web App Mosaic gewonnene Wissen zu korrigieren. / 87b57dfdbcf218de91e2) Es ist ein separater Artikel aus dem Set, aber es geht um die Implementierung von Mosaikbildern.
Zuerst konnte nur das Gesicht erkannt werden, aber wie ich in diesem Artikel schrieb, habe ich es auch möglich gemacht, den Wortlaut zu erkennen. Ist der Erkennungsbereich rechteckig, wenn nur das Gesicht durch Mosaikverarbeitung verarbeitet wird? Er war parallel zum Bild, aber im Fall der Formulierung ist der Erkennungsbereich geneigt.
Ich habe ein Mosaik auf einem schrägen Bereich implementiert, der kein Rechteck ist (ob ein Polygon auch gut ist), also werde ich einen Artikel als Memorandum schreiben, bevor ich ihn vergesse.
Dies ist das Originalbild. Ich möchte das Gesicht und das Wort "LIFE GUARD" in diesem Bild mosaikieren. Das Erkennungsergebnis sieht folgendermaßen aus. Das Gesicht ist parallel zum Bild, aber die Buchstaben sind schräg. Ich möchte ein Mosaikbild wie dieses machen.
try:
height = image.shape[0]
width = image.shape[1]
# 1.Erstellen Sie ein Bild mit einem Mosaik, das auf das gesamte Bild angewendet wird.
ratio=0.1
imageSmall = cv2.resize(image, None, fx=ratio, fy=ratio, interpolation=cv2.INTER_NEAREST)
imageMosaic = cv2.resize(imageSmall, image.shape[:2][::-1], interpolation=cv2.INTER_NEAREST)
# 2.Erstellen Sie ein Maskenbild des Teils, in das Sie ein Mosaik einfügen möchten.
imageMask = np.tile(np.uint8(0), (height, width, 1))
for points in pointsList:
pointAry = convertToArray(points)
contours = np.array(
[
[pointAry[0].x, pointAry[0].y],
[pointAry[1].x, pointAry[1].y],
[pointAry[2].x, pointAry[2].y],
[pointAry[3].x, pointAry[3].y],
]
)
cv2.fillConvexPoly(imageMask, contours, color=(255, 255, 255))
# 3.Ein Mosaikbild wird durch Maskenverarbeitung mit dem Originalbild kombiniert.
# for y in range(height) :
# for x in range(width) :
# color = imageMask[y][x]
# if color != 0 :
# image[y][x] = imageMosaic[y][x]
#↑ 10 Sekunden Code ↓ 80 Millisekunden Code(800x600)
image = np.where(imageMask != 0, imageMosaic, image)
except Exception as e:
logger.exception(e)
~~ Yuru Rekrutierung 1 ~~ ~~ 3. Ein Mosaikbild wird durch Maskenverarbeitung mit dem Originalbild kombiniert. ~~ ~~ Ich verarbeite jedes Pixel in einer Schleife, aber es ist langsam. Ich frage mich, ob OpenCV schneller und effizienter implementiert werden kann. Jemand. ~~ Ich habe einige Ratschläge von @yousuke_papa bekommen und es gelöst. Die Verarbeitungszeit für 800x600 Bilder wurde von 10 Sekunden auf 80 Millisekunden reduziert! Lange Schleifen in Python, nein, absolut! !!
Lose Rekrutierung 2 "Ist es ein Rechteck? Parallel zum Bild" oder "diagonaler Bereich" Der offizielle Name hier. Jemand!
Recommended Posts