Article pratique pour regarder en arrière et corriger les connaissances acquises en développant Serverless Web App Mosaic / 87b57dfdbcf218de91e2) C'est un article séparé de l'ensemble, mais il s'agit de l'implémentation de mosaïques d'images.
Au début, seul le visage pouvait être détecté, mais comme je l'ai écrit dans cet article, j'ai également permis de détecter le libellé. La zone de détection est-elle rectangulaire alors que seul le visage est traité par traitement mosaïque? Elle était parallèle à l'image, mais dans le cas du libellé, la zone de détection est inclinée.
J'ai implémenté une mosaïque sur une zone inclinée qui n'est pas un rectangle (si un polygone est également bon), donc j'écrirai un article comme mémorandum avant de l'oublier.
Ceci est l'image originale. Je veux mosaïquer le visage et le mot "LIFE GUARD" dans cette image. Le résultat de la détection ressemble à ceci. Le visage est parallèle à l'image, mais les lettres sont inclinées. Je veux créer une image en mosaïque comme celle-ci.
try:
height = image.shape[0]
width = image.shape[1]
# 1.Créez une image avec une mosaïque appliquée à l'image entière.
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.Créez une image de masque de la pièce où vous souhaitez placer une mosaïque.
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.Une image en mosaïque est combinée avec l'image originale par traitement de masque.
# for y in range(height) :
# for x in range(width) :
# color = imageMask[y][x]
# if color != 0 :
# image[y][x] = imageMosaic[y][x]
#↑ code 10 secondes ↓ code 80 millisecondes(800x600)
image = np.where(imageMask != 0, imageMosaic, image)
except Exception as e:
logger.exception(e)
~~ Recrutement Yuru 1 ~~ ~~ 3. Une image mosaïque est combinée avec l'image originale par traitement de masque. ~~ ~~ Je traite chaque pixel en boucle, mais c'est lent. Je me demande si OpenCV peut être implémenté plus rapidement et plus efficacement. Quelqu'un. ~~ J'ai reçu des conseils de @yousuke_papa et je l'ai résolu. Le temps de traitement des images 800x600 a été réduit de 10 secondes à 80 millisecondes! De longues boucles en Python, non, absolument! !!
Recrutement lâche 2 "Est-ce un rectangle? Parallèle à l'image" ou "zone diagonale" Le nom officiel ici. Quelqu'un!
Recommended Posts