-
Notifications
You must be signed in to change notification settings - Fork 0
/
height_redim.py
59 lines (47 loc) · 1.87 KB
/
height_redim.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# -*- coding: utf-8 -*-
'''
Dernière étape : Utilisation du seam carving vertical pour faire un seam carving horizontal
A ce stade, on dispose de :
- une image à traiter
- (Anthony) sa carte d'énergie
- (Antoine) une fonction calculate_cost_matrix qui détermine une matrice des coûts de l'image
- (Antoine) une fonction detect_seam utilisant la matrice de coûts, et qui retourne la seam verticale
à enlever sous forme de tuple de coordonnées
- (Elie) une fonction qui enlève le seam demandé sur l'image
- (Elie) une fonction qui décale l'image pour compenser la suppression du seam
Tout cela applique un seam carving vertical
Ce fichier permet d'appliquer un seam carving horizontal à partir du seam carving vertical déjà codé
'''
from PIL import Image
from seam import detect_seam
from seam import calculate_cost_matrix
from elie import remove_seam
from dual_gradient import gradient
def height_redim(im, repeat, im_grad):
'''
Cette fonction :
- tourne l'image et le gradient de l'image à 90° à droite
- applique le seam carving sur les images tournées jusqu'à ce que la hauteur voulue soit atteinte
- re-tourne l'image et la renvoie
'''
rotated = im.rotate(270)
rotated_grad = im_grad.rotate(270)
# Utilisation de l'algorithme d'Antoine
for k in range(repeat): # >= peut etre ?
# Partie d'Antoine (seam.py)
cost_matrix = calculate_cost_matrix(rotated_grad)
seam = detect_seam(cost_matrix)
# Partie d'Elie (elie.py)
rotated = remove_seam(rotated, seam)
rotated.show()
return rotated.rotate(90)
def main():
'''
Fonction principale
'''
im = Image.open("1.jpg")
im_grad = Image.open("1g.jpg")
hr = height_redim(im, 5, im_grad)
hr.show()
if __name__ == "__main__":
main()