You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
3.0 KiB

from matplotlib.widgets import RectangleSelector
import matplotlib.pyplot as plt
from function import *
import numpy as np
# verrifier que l'image est de même taille que le mask
def onSelect(eclick, erelease):
# remplace les pixels sélectioné en rouge et enregistre ses pixels comme étant à modifé
x1, y1 = int(eclick.xdata), int(eclick.ydata)
x2, y2 = int(erelease.xdata), int(erelease.ydata)
img[y1:y2+1,x1:x2+1] = (255,0,0)
mask[y1:y2+1,x1:x2+1] = True
maskImg[y1:y2+1,x1:x2+1] = 255
ax.imshow(img)
plt.draw()
dialog("consigne","Dans la prochaine boite de dialogue, selectionez l'image que vous voulez traiter")
imgOr = read(selectImage())
img = imgOr.copy()
rep = binDialog("image mask", "avez vous déjà le mask de l'image") == "Oui"
height, width = img.shape[:2]
if rep:
# récupère le mask enregistré
maskImg = read(selectImage())
if (len(maskImg.shape) == 3): # converti l'image si elle est trop
maskImg = maskImg[:,:,0]
mask = maskImg == 255
if (img.shape[:2] != mask.shape[:2]):
dialog("erreur","La taille de l'image et la taille du mask ne correspondent pas. Veuillez relancer le programme")
exit()
img[mask] = (255,0,0)
else:
# lance la fenêtre de selection
fig, ax = plt.subplots()
plt.axis("off")
ax.imshow(img)
mask = np.zeros((height, width), dtype=bool)
maskImg = np.zeros((height, width), dtype=np.uint8)
# permet la selection en rectangle sur l'image et appelle la fonction onSelect
toggle_selector = RectangleSelector(ax, onSelect, useblit=True,
button=[1], minspanx=5, minspany=5, spancoords='pixels',
interactive=True)
plt.imshow(img)
plt.show()
if (img.shape[:2] != mask.shape[:2]):
dialog("erreur","la taille de l'image et la taille du mask ne corresponde pas")
exit()
# lance une nouvelle fenêtre que l'on vas pouvoir annimer en fonction de l'avancement de l'inpainting
plt.ion()
plt.axis("off")
plt.imshow(mask)
plt.show()
plt.title("mask de l'image")
plt.pause(0.01)
plt.title("génération de l'image")
# lance l'impainting sur img avec le mask mask avec une taile de patch de 2
res = doTheInpainting(img,mask,2)
plt.ioff()
plt.close()
dialog("terminé","la génération de l'image est terminé")
if binDialog("avant/après","Voulez vous voir la comparaison avant après ?") == "Oui":
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.imshow(imgOr)
ax1.set_title('Original')
ax1.axis("off")
ax2.imshow(res)
ax2.set_title('Result')
ax2.axis("off")
plt.show()
if binDialog("mask de l'image","Voulez vous enregistrer le mask de l'image ?") == "Oui":
save_path = stringDialog("mask de l'image","Entrez le chemin d'enregistrement du mask: ")
plt.imsave(save_path, maskImg, cmap='gray')
if binDialog("image","Voulez vous enregister l'image généré ?") == "Oui":
save_path = stringDialog("image","Entrez le chemin d'enregistrement de l'image: ")
plt.imsave(save_path, res)
dialog("fin","Merci d'avoir utitilé ce programe")