Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from PIL import Image as IMG, ImageDraw,ImageTk
- from tkinter.filedialog import askopenfilename
- from tkinter import *
- import random, math, copy
- def Laplassian(image, c, mode):
- im = copy.copy(image)
- draw = ImageDraw.Draw(im)
- pix = image.load()
- for i in range(1, width-1):
- for j in range(1, height-1):
- f = pix[i, j][0]
- # if (f<135 and not mode):
- # print('yeah')
- xn = pix[i+1, j][0]
- xp = pix[i-1, j][0]
- yn = pix[i, j+1][0]
- yp = pix[i, j-1][0]
- xnd = pix[i+1, j-1][0]
- xpd = pix[i-1, j+1][0]
- ynd = pix[i+1, j+1][0]
- ypd = pix[i-1, j-1][0]
- if (mode):
- lap = -(xn + xp + yn + yp )+(4 * f)
- else:
- lap = -(xn + xp + yn + yp + xnd + ynd + xpd + ypd) + (8 * f)
- if (lap<0):
- lap = 0
- if ( lap>255):
- lap = 255
- g = int(f + (c * lap))
- if (g < 0):
- g = 0
- if (g > 255):
- g = 255
- draw.point((i, j), (lap, lap, lap))
- return im
- def Mask(image, size):
- s = size//2
- im = copy.copy(image)
- draw = ImageDraw.Draw(im)
- pix = image.load()
- for i in range(0, width):
- for j in range(0, height):
- r = pix[i,j][0]
- for w in range(-s, s):
- for h in range(-s, s):
- x = i+w
- z = j+h
- if (x < 0):
- x = 0
- if (x > width - 1):
- x = width - 1
- if (z < 0):
- z = 0
- if (z > height - 1):
- z = height - 1
- r += pix[x, z][0]
- r = r // (size ** 2)+(30-size)
- if (r < 0):
- r = 0
- if (r > 255):
- r = 255
- draw.point((i, j), (r, r, r))
- return im
- def Sobella (image):
- im = copy.copy(image)
- draw = ImageDraw.Draw(im)
- pix = image.load()
- for i in range(1, width-1):
- for j in range(1, height-1):
- # r_up = -pix[i-1, j+1][0] - 2 * pix[i, j+1][0] - pix[i+1, j+1][0]
- # r_dwn = pix[i-1, j-1][0] + 2 * pix[i, j-1][0] + pix[i+1, j-1][0]
- r_up = -pix[i-1, j+1][0] - 2 * pix[i-1, j][0] - pix[i-1, j-1][0]
- r_dwn = pix[i+1, j+1][0] + 2 * pix[i+1, j][0] + pix[i+1, j-1][0]
- r = (r_up + r_dwn)
- if (r < 0):
- r = 0
- if (r > 255):
- r = 255
- draw.point((i, j), (r, r, r))
- return im
- def Gradation (image):
- im = copy.copy(image)
- draw = ImageDraw.Draw(im)
- pix = image.load()
- min = 255
- max = 0
- L = [[0] * height for i in range(width)]
- for i in range(1, width-1):
- for j in range(1, height-1):
- f = pix[i, j][0]
- # if (f<135 and not mode):
- # print('yeah')
- xn = pix[i+1, j][0]
- xp = pix[i-1, j][0]
- yn = pix[i, j+1][0]
- yp = pix[i, j-1][0]
- xnd = pix[i+1, j-1][0]
- xpd = pix[i-1, j+1][0]
- ynd = pix[i+1, j+1][0]
- ypd = pix[i-1, j-1][0]
- lap = -(xn + xp + yn + yp + xnd + ynd + xpd + ypd) + (8 * f)
- if (lap<0):
- lap = 0
- if ( lap>255):
- lap = 255
- g = int(f + (0.5 * lap))
- if (g < 0):
- g = 0
- if (g > 255):
- g = 255
- # min / max for normalization image
- if (g < min):
- min = g
- if (g > max):
- max = g
- L[i][j] = g
- for i in range(1, width-1):
- for j in range(1, height-1):
- # Normalize image
- L[i][j] = int((L[i][j] - min) * (255 / max))
- draw.point((i, j), (L[i][j], L[i][j], L[i][j]))
- return im
- image = IMG.open(askopenfilename())
- split = image.filename.split("/")
- imagename = split[len(split)-1]
- width = image.size[0]
- height = image.size[1]
- pix = image.load()
- # make grey image
- draw = ImageDraw.Draw(image)
- for i in range(width):
- for j in range(height):
- a = pix[i, j][0]
- b = pix[i, j][1]
- c = pix[i, j][2]
- # S = int(0.2989 * a + 0.5870 * b + 0.1140 * c)
- S = int(a + b + c)//3
- draw.point((i, j), (S, S, S))
- # Laplassian
- laplassImage = Laplassian(image, 0.5, 0)
- # Sobella
- sobellaImage = Sobella(image)
- # Mask 5x5
- mask = Mask(image, 5)
- # Gradation
- gradation = Gradation(image)
- images = [image,laplassImage,sobellaImage,mask,gradation]
- root = Tk()
- #root.bind("<Button>", button_click_exit_mainloop)
- canvas = Canvas(root,width=999,height=999)
- canvas.pack()
- shape = (2,3)
- xlen,ylen = 0,0
- imgs = [x.resize((530,300)) for x in images]
- xsize = sum(im.size[0] for im in imgs)
- ysize = sum(im.size[1] for im in imgs)
- root.geometry('%dx%d' % (xsize,ysize))
- tkpi = [ImageTk.PhotoImage(im,master=canvas) for im in imgs]
- lbl = Label(root,text='Вторая лаба Задание №1', justify=LEFT)
- lbl.place(relx=.4, rely=.75)
- lbl.config(font=('times', 20, 'bold'))
- for i in range(shape[0]):
- for j in range(shape[1]):
- index = i*shape[1]+j
- if index == 5:
- break
- label_image = Label(root, image=tkpi[index])
- label_image.place(x=xlen,y=ylen,width=imgs[index].size[0],height=imgs[index].size[1])
- if j == shape[1]-1:
- ylen = ylen + imgs[index].size[1]
- xlen = 0
- else:
- xlen = xlen + imgs[index].size[0]
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement