diy:projets:tiltshift
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
diy:projets:tiltshift [2018/05/24 09:16] – créée ycaminade | diy:projets:tiltshift [2018/05/28 09:33] (Version actuelle) – [Explication] ycaminade | ||
---|---|---|---|
Ligne 7: | Ligne 7: | ||
Cet effet peut aussi être appliqué à une vidéo, ce que nous ne ferons pas ici par manque de vidéo exploitable. | Cet effet peut aussi être appliqué à une vidéo, ce que nous ne ferons pas ici par manque de vidéo exploitable. | ||
+ | |||
+ | ====== Explication ====== | ||
+ | Le programme procède en 3 parties : on applique un flou, puis on génère un masque, et enfin on applique le masque pour fusionner l' | ||
+ | |||
+ | Pour le flou, plutôt que d' | ||
+ | <code python> | ||
+ | def blur(image): | ||
+ | hsv = cv2.cvtColor(image, | ||
+ | hue, saturation, value = cv2.split(hsv) | ||
+ | |||
+ | saturation = np.array(saturation * 1.2, dtype=np.uint16) | ||
+ | saturation = np.array(np.clip(saturation, | ||
+ | |||
+ | value = np.array(value * 1.1, dtype=np.uint16) | ||
+ | value = np.array(np.clip(value, | ||
+ | |||
+ | image = cv2.cvtColor(cv2.merge((hue, | ||
+ | |||
+ | image = cv2.bilateralFilter(image, | ||
+ | image = cv2.blur(image, | ||
+ | return image | ||
+ | |||
+ | </ | ||
+ | |||
+ | Pour appliquer le masque, on le parcourt simplement pixel par pixel et on se sert du niveau de gris comme coefficient pour mélanger les couleurs sur l' | ||
+ | |||
+ | <code python> | ||
+ | def blend(original, | ||
+ | height, width, channels = original.shape | ||
+ | output = np.zeros((height, | ||
+ | for i in range(0, height): | ||
+ | for j in range(0, width): | ||
+ | alpha = mask.item(i, | ||
+ | b_value = original.item(i, | ||
+ | g_value = original.item(i, | ||
+ | r_value = original.item(i, | ||
+ | output.itemset((i, | ||
+ | output.itemset((i, | ||
+ | output.itemset((i, | ||
+ | return output | ||
+ | </ | ||
+ | |||
+ | On se sert des deux fonctions précédentes pour obtenir l' | ||
+ | On génère ensuite un masque simple. On créé une image noire de taille adaptée, on rajoute une bande blanche au centre, puis on applique un flou sur le résultat pour obtenir un dégradé. On peut maintenant fusionner les deux images en se servant de la fonction //blend// décrite précédemment. | ||
+ | |||
+ | <code python> | ||
+ | if (len(sys.argv) == 2): | ||
+ | pic = cv2.imread(sys.argv[1]) | ||
+ | |||
+ | b_pic = blur(pic) | ||
+ | |||
+ | height, width, channels = pic.shape | ||
+ | mask = np.zeros((height, | ||
+ | mask[0.4*height: | ||
+ | mask = cv2.blur(mask, | ||
+ | shifted = blend(pic, b_pic, mask) | ||
+ | cv2.imwrite(' | ||
+ | </ |
diy/projets/tiltshift.1527153398.txt.gz · Dernière modification : 2018/05/24 09:16 de ycaminade