diff --git a/filter.py b/filter.py index 4150df2..c4a87b5 100644 --- a/filter.py +++ b/filter.py @@ -1,28 +1,27 @@ from PIL import Image import numpy as np -img = Image.open("img2.jpg") -arr = np.array(img) -a = len(arr) -a1 = len(arr[1]) -i = 0 -while i < a - 11: - j = 0 - while j < a1 - 11: - s = 0 - for n in range(i, i + 10): - for n1 in range(j, j + 10): - n1 = arr[n][n1][0] - n2 = arr[n][n1][1] - n3 = arr[n][n1][2] - M = n1 + n2 + n3 - s += M - s = int(s // 100) - for n in range(i, i + 10): - for n1 in range(j, j + 10): - arr[n][n1][0] = int(s // 50) * 50 - arr[n][n1][1] = int(s // 50) * 50 - arr[n][n1][2] = int(s // 50) * 50 - j = j + 10 - i = i + 10 -res = Image.fromarray(arr) -res.save('res.jpg') + + +def do_mosaic(img, size, grey_size): + for x in range(0, len(img), size): + for y in range(0, len(img[0]), size): + img[x:x + size, y:y + size] = find_average( + img[x:x + size, y:y + size], size, grey_size) + return img + + +def find_average(img_part, size, grey_size): + average_color = (img_part[:size, :size].sum() / 3) // size ** 2 + return int(average_color // grey_size) * grey_size + + +np.seterr(over='ignore') +source_img = Image.open(input("Введите имя файла, которое хотите конвертировать: ")) +mosaic_size = int(input("Введите размер мозаики: ")) +grey = int(input("Введите количество градаций серого: ")) + +img_code = np.array(source_img) +grey_size = 255 // grey + +res = Image.fromarray(do_mosaic(img_code, mosaic_size, grey_size)) +res.save(input("Введите имя файла, в которой хотите сохранить результат: "))