Advertisement
999ms

Untitled

Mar 31st, 2020
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.37 KB | None | 0 0
  1. from PIL import Image, ImageFilter
  2. def F(num):
  3.     name = "C:\\Users\\bossb\\Desktop\\" + str(num) + ".jpeg"
  4.     try:  
  5.         im = Image.open(name)  
  6.     except FileNotFoundError:  
  7.         return
  8.         print("Файл не найден")
  9.  
  10.     im = im.convert('RGB')
  11.     w, h = im.size
  12.  
  13.     img = im
  14.     im = im.load()
  15.  
  16.     p = [[(i, j) for j in range(h)] for i in range(w)]
  17.     d = [[1 for j in range(h)] for i in range(w)]
  18.  
  19.     def get(x, y):
  20.         if p[x][y] == (x, y):
  21.             return (x, y)
  22.         p[x][y] = get(p[x][y][0], p[x][y][1])
  23.         return p[x][y]
  24.  
  25.     def uni(a, b):
  26.         a = get(a[0], a[1])
  27.         b = get(b[0], b[1])
  28.         if a == b:
  29.             return
  30.         if d[a[0]][a[1]] < d[b[0]][b[1]]:
  31.             a, b = b, a
  32.         p[b[0]][b[1]] = a
  33.         d[a[0]][a[1]] += d[b[0]][b[1]]
  34.  
  35.  
  36.     def areConnected(a, b):
  37.         return abs(a[0] - b[0]) * 1.125 + abs(a[1] - b[1]) * 0.15 + abs(a[2] - b[2]) * 3 <= 50
  38.  
  39.     steps = [(i, j) for i in range(-1, 2) for j in range(-1, 2) if not (i == 0 and j == 0)]
  40.  
  41.     for x in range(w):
  42.         for y in range(h):
  43.             for (dx, dy) in steps:
  44.                 nx = x + dx
  45.                 ny = y + dy
  46.                 if nx < 0 or ny < 0 or nx >= w or ny >= h:
  47.                     continue
  48.                 if areConnected(im[x, y], im[nx, ny]):
  49.                     uni((x, y), (nx, ny))
  50.  
  51.  
  52.     mp = {}
  53.  
  54.     for x in range(w):
  55.         for y in range(h):
  56.             par = get(x, y)
  57.             if par not in mp:
  58.                 mp[par] = 0
  59.             mp[par] += 1
  60.  
  61.     sz = w * h
  62.    
  63.     for value in mp:
  64.         cnt = mp[value]
  65.         x = int(255.0 * cnt / sz)
  66.         if x > 100:
  67.             x = 255
  68.         else:
  69.             x = 0
  70.         if cnt < 2:
  71.             x = 255
  72.         mp[value] = (x, x, x)
  73.  
  74.     for x in range(w):
  75.         for y in range(h):
  76.             im[x, y] = mp[get(x, y)]
  77.  
  78.  
  79.     if True:    
  80.         for x in range(w):
  81.             for y in range(h):
  82.                 p[x][y] = (x, y)
  83.                 d[x][y] = 1
  84.  
  85.         steps = [(i, j) for i in range(-2, 3) for j in range(-2, 3)]
  86.         mp = {}
  87.         for x in range(w):
  88.             for y in range(h):
  89.                 for (dx, dy) in steps:
  90.                     if dx + dy == 0:
  91.                         continue
  92.                     nx = x + dx
  93.                     ny = y + dy
  94.                     if nx >= w or ny >= h:
  95.                         continue
  96.                     if im[x, y] == im[nx, ny]:
  97.                         uni((x, y), (nx, ny))
  98.  
  99.         for x in range(w):
  100.             for y in range(h):
  101.                 px, py = get(x, y)
  102.                 if d[px][py] <= 15:
  103.                     im[px, py] = (255, 255, 255)
  104.                 mp[(px, py)] = im[px, py]
  105.  
  106.     for x in range(w):
  107.         for y in range(h):
  108.             im[x, y] = mp[get(x, y)]
  109.  
  110.     im2 = Image.open(name).convert('RGB')
  111.     w, h = im2.size
  112.  
  113.     img2 = im2
  114.     im2 = im2.load()
  115.  
  116.  
  117.     for x in range(w):
  118.         for y in range(h):
  119.             if im[x, y] != (0, 0, 0):
  120.                 im2[x, y] = (255, 255, 255)
  121.  
  122.     for x in range(w):
  123.         for y in range(h):
  124.             d[x][y] = 1
  125.             p[x][y] = (x, y)
  126.  
  127.     mp = {}
  128.  
  129.     steps = [(i, j) for i in range(-1, 2) for j in range(-1, 2) if not (i == 0 and j == 0)]
  130.  
  131.     white = (255, 255, 255)
  132.  
  133.     for x in range(w):
  134.         for y in range(h):
  135.             good = False
  136.             for (dx, dy) in steps:
  137.                 nx = x + dx
  138.                 ny = y + dy
  139.                 if nx < 0 or ny < 0 or nx >= w or ny >= h:
  140.                     continue
  141.                 if im2[nx, ny] == white and im[x, y] != white:
  142.                     good = True
  143.                     break
  144.             if good:
  145.                 if im2[x, y] not in mp:
  146.                     mp[im2[x, y]] = 0
  147.                 mp[im2[x, y]] += 1
  148.     mx = 0
  149.     clr = white
  150.     mp2 = {}
  151.    
  152.     def dist(a, b):
  153.         return (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2 + (a[2] - b[2]) ** 2
  154.    
  155.     for val in mp:
  156.         cur = 0
  157.         for val2 in mp:
  158.             if dist(val, val2) <= 25:
  159.                 cur += mp[val2]
  160.         if mx < cur:
  161.             mx = cur
  162.             clr = val
  163.  
  164.     for x in range(w):
  165.         for y in range(h):
  166.             if im2[x, y] == clr:
  167.                 im2[x, y] = (0, 0, 0)
  168.     img2.show()
  169.    
  170. for num in range(50):
  171.     F(num)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement