diff --git a/filter.py b/filter.py index 4150df2..7bf58ef 100644 --- a/filter.py +++ b/filter.py @@ -1,28 +1,38 @@ 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 main(): + url = input("Название изображения: ") + name = input("Имя результата обработки: ") + img = Image.open(url) + pixels = np.array(img) + mosaic_size = int(input("Размер мозаики: ")) + color_amount = int(input("Кол-во оттенков серого: ")) + pixels = process_pixels(pixels, mosaic_size, color_amount) + res = Image.fromarray(pixels) + res.save(name) + + +def process_pixels(pixels, mosaic_size, color_amount): + height = len(pixels) + width = len(pixels[1]) + gray_step = 255 // (color_amount - 1) + for x in range(0, width, mosaic_size): + for y in range(0, height, mosaic_size): + average = find_average(pixels, x, y, mosaic_size) + pixels = change_pixels(pixels, x, y, average, mosaic_size, gray_step) + + return pixels + + +def find_average(pixels, x, y, length): + return np.average(pixels[x:x + length, y:y + length]) + + +def change_pixels(pixels, x, y, average, length, gray_step): + pixels[x:x + length, y:y + length] = int(average // gray_step) * gray_step + return pixels + + +main() diff --git a/res.jpg b/res.jpg index d8d97ff..809b45c 100644 Binary files a/res.jpg and b/res.jpg differ