diff --git a/isv_project/app/src/blend_images.py b/isv_project/app/src/blend_images.py new file mode 100644 index 0000000..ba96f53 --- /dev/null +++ b/isv_project/app/src/blend_images.py @@ -0,0 +1,20 @@ +from PIL import Image +import numpy as np +import matplotlib.pyplot as plt + +def blend_images(img1, img2, blend_ratio): + + img2 = img2.resize(img1.size) + + array1 = np.array(img1) + array2 = np.array(img2) + + blended_array = np.round(array1 * blend_ratio + array2 * (1 - blend_ratio)).astype(np.uint8) + + if blended_array.ndim == 2: + blended_array = np.expand_dims(blended_array, axis=2) + + blended_img = Image.fromarray(blended_array, 'RGB') + + return blended_img + diff --git a/isv_project/app/src/convert_to_black_and_white.py b/isv_project/app/src/convert_to_black_and_white.py new file mode 100644 index 0000000..af3eed0 --- /dev/null +++ b/isv_project/app/src/convert_to_black_and_white.py @@ -0,0 +1,7 @@ +def convert_to_black_and_white(image): + for x in range(image.width): + for y in range(image.height): + pixel_color = image.getpixel((x, y)) + + if pixel_color != (255, 255, 255): + image.putpixel((x, y), (0, 0, 0)) \ No newline at end of file diff --git a/isv_project/app/src/convert_to_grayscale.py b/isv_project/app/src/convert_to_grayscale.py new file mode 100644 index 0000000..444de8e --- /dev/null +++ b/isv_project/app/src/convert_to_grayscale.py @@ -0,0 +1,4 @@ +def convert_to_grayscale(image): + + grayscale_image = image.convert("L") + return grayscale_image \ No newline at end of file diff --git a/isv_project/app/src/create_gif.py b/isv_project/app/src/create_gif.py new file mode 100644 index 0000000..81c81ac --- /dev/null +++ b/isv_project/app/src/create_gif.py @@ -0,0 +1,11 @@ +import imageio +from PIL import Image + +def creer_gif(tableau_images, output_path, duree=0.5): + gif = [] + + for img in tableau_images: + gif.append(Image.fromarray(img)) + + # Enregistrer le GIF + imageio.mimsave(output_path, gif, duration=duree) diff --git a/isv_project/app/src/fusionner_horizontalement.py b/isv_project/app/src/fusionner_horizontalement.py new file mode 100644 index 0000000..80ec0b5 --- /dev/null +++ b/isv_project/app/src/fusionner_horizontalement.py @@ -0,0 +1,13 @@ +from resize_image import redimensionner_image +from PIL import Image + +def fusionner_horizontalement(image1, image2): + nouvelle_largeur = int(image2.size[0] * (image1.size[1] / image2.size[1])) + nouvelle_hauteur = image1.size[1] + image2_redimensionnee = redimensionner_image(image2, nouvelle_largeur, nouvelle_hauteur) + + result = Image.new('RGB', (image1.width + image2_redimensionnee.width, image1.height)) + result.paste(image1, (0, 0)) + result.paste(image2_redimensionnee, (image1.width, 0)) + + return result diff --git a/isv_project/app/src/fusionner_verticalement.py b/isv_project/app/src/fusionner_verticalement.py new file mode 100644 index 0000000..a0622a4 --- /dev/null +++ b/isv_project/app/src/fusionner_verticalement.py @@ -0,0 +1,14 @@ +from resize_image import redimensionner_image +from PIL import Image + +def fusionner_verticalement(image1, image2): + + nouvelle_largeur = image1.size[0] + nouvelle_hauteur = int(image2.size[1] * (image1.size[0] / image2.size[0])) + image2_redimensionnee = redimensionner_image(image2, nouvelle_largeur, nouvelle_hauteur) + + result = Image.new('RGB', (image1.width, image1.height + image2_redimensionnee.height)) + result.paste(image1, (0, 0)) + result.paste(image2_redimensionnee, (0, image1.height)) + + return result \ No newline at end of file diff --git a/isv_project/app/src/image_opener.py b/isv_project/app/src/image_opener.py new file mode 100644 index 0000000..8765fc3 --- /dev/null +++ b/isv_project/app/src/image_opener.py @@ -0,0 +1,4 @@ +from PIL import Image + +def open_image(image_path): + return Image.open(image_path) diff --git a/isv_project/app/src/resize_image.py b/isv_project/app/src/resize_image.py new file mode 100644 index 0000000..b3cd5e1 --- /dev/null +++ b/isv_project/app/src/resize_image.py @@ -0,0 +1,17 @@ +from PIL import Image +import numpy as np +import matplotlib.pyplot as plt + +def redimensionner_image(image, nouvelle_largeur, nouvelle_hauteur): + a0, b0, _ = image.shape + + ratio_lignes = a0 / nouvelle_largeur + ratio_colonnes = b0 / nouvelle_hauteur + + image_sortie = np.zeros((nouvelle_largeur, nouvelle_hauteur, 3), dtype=np.uint8) + for ligne in range(nouvelle_largeur): + for col in range(nouvelle_hauteur): + for i in range(3): + image_sortie[ligne, col, i] = image[int(ligne * ratio_lignes), int(col * ratio_colonnes), i] + + return Image.fromarray(image_sortie) \ No newline at end of file