diff --git a/filter.py b/filter.py index 4150df2..3d65ab1 100644 --- a/filter.py +++ b/filter.py @@ -1,28 +1,42 @@ 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 pixel_art_filter(mosaic_side: int, step: int): + img_length, img_height = len(img_arr), len(img_arr[1]) + segment_x, segment_y = np.arange(0, img_length, mosaic_side), np.arange(0, img_height, mosaic_side) + [[pixel_coloring(x, y, mosaic_side, step) for y in segment_y] for x in segment_x] + + +def find_average_brightness(x, y, mosaic_side): + result = 0 + for n, m in np.nditer([np.arange(x, x + mosaic_side)[:, None], np.arange(y, y + mosaic_side)]): + result += img_arr[n][m][0] / 3 + img_arr[n][m][1] / 3 + img_arr[n][m][2] / 3 + return int(result) // (mosaic_side * mosaic_side) + + +def pixel_coloring(x, y, mosaic_side, step): + avg_brightness = find_average_brightness(x, y, mosaic_side) + for n in range(x, x + mosaic_side): + for m in range(y, y + mosaic_side): + img_arr[n][m][range(3)] = int(avg_brightness // step) * step + + +def start_program(): + global img_arr + print("Введите имя исходного изображения:") + original_img_name = input() + print("Введите имя конечного изображения:") + filtered_img_name = input() + print("Задайте значения размера мозайки и шага яркости через пробел:") + mosaic_side, step = map(int, input().split()) + print("Обработка изображения началась, ожидайте") + img_arr = np.array(Image.open(original_img_name)) + pixel_art_filter(mosaic_side, step) + changed_img = Image.fromarray(img_arr) + changed_img.save(filtered_img_name) + print("Обработка успешно завершена") + + +np.seterr(over='ignore') +start_program()