diy:projets:tiltshift
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
diy:projets:tiltshift [2018/05/24 09:37] – ycaminade | diy:projets:tiltshift [2018/05/28 09:33] (Version actuelle) – [Explication] ycaminade | ||
---|---|---|---|
Ligne 13: | Ligne 13: | ||
Pour le flou, plutôt que d' | Pour le flou, plutôt que d' | ||
<code python> | <code python> | ||
- | TODO | + | 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.1527154632.txt.gz · Dernière modification : 2018/05/24 09:37 de ycaminade