From b82b1708ab49020389d9dec1122cff1c8646eb55 Mon Sep 17 00:00:00 2001 From: K-mixam Date: Wed, 24 Nov 2021 21:01:59 +0500 Subject: [PATCH 1/4] first stage --- filter.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/filter.py b/filter.py index 4150df2..0060ed1 100644 --- a/filter.py +++ b/filter.py @@ -5,23 +5,27 @@ a = len(arr) a1 = len(arr[1]) i = 0 -while i < a - 11: +while i < a - 1: j = 0 + + # если остаются необработанные 10 пикселей снизу и справа, то здесь должно быть "j < a1 - 1", + # а не "j < a1 - 11". Но тогда у меня возникает ошибка IndexError в цикле с итератором "j". Что странно, + # потому что с итератором "i" таких проблем не возникает. Думаю, что проблема будет решена на этапе + # замены циклов матричными преобразованиями 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 + r = int(arr[n][n1][0]) + g = int(arr[n][n1][1]) + b = int(arr[n][n1][2]) + s += r + g + b 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 + arr[n][n1][0] = int(s // 3) + arr[n][n1][1] = int(s // 3) + arr[n][n1][2] = int(s // 3) j = j + 10 i = i + 10 res = Image.fromarray(arr) From 5ded97cb5de0a57b0e0e4c5072a03d4a8049d4cc Mon Sep 17 00:00:00 2001 From: K-mixam Date: Wed, 24 Nov 2021 22:48:15 +0500 Subject: [PATCH 2/4] second stage --- filter.py | 58 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 28 deletions(-) diff --git a/filter.py b/filter.py index 0060ed1..5cfab81 100644 --- a/filter.py +++ b/filter.py @@ -1,32 +1,34 @@ 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 - 1: - j = 0 - - # если остаются необработанные 10 пикселей снизу и справа, то здесь должно быть "j < a1 - 1", - # а не "j < a1 - 11". Но тогда у меня возникает ошибка IndexError в цикле с итератором "j". Что странно, - # потому что с итератором "i" таких проблем не возникает. Думаю, что проблема будет решена на этапе - # замены циклов матричными преобразованиями - while j < a1 - 11: - s = 0 - for n in range(i, i + 10): - for n1 in range(j, j + 10): - r = int(arr[n][n1][0]) - g = int(arr[n][n1][1]) - b = int(arr[n][n1][2]) - s += r + g + b - s = int(s // 100) - for n in range(i, i + 10): - for n1 in range(j, j + 10): - arr[n][n1][0] = int(s // 3) - arr[n][n1][1] = int(s // 3) - arr[n][n1][2] = int(s // 3) - j = j + 10 - i = i + 10 -res = Image.fromarray(arr) +rgb_table = np.array(img) +height = len(rgb_table) +width = len(rgb_table[1]) +mosaic_size = int(input("Enter the mosaic size ")) +grayscale_value = int(input("Enter the grayscale value ")) + + +def count_average_brightness(_i, _j): + average_brightness = 0 + for n in range(_i, _i + mosaic_size): + for n1 in range(_j, _j + mosaic_size): + r = int(rgb_table[n][n1][0]) + g = int(rgb_table[n][n1][1]) + b = int(rgb_table[n][n1][2]) + average_brightness += r//3 + g//3 + b//3 + return int(average_brightness // (mosaic_size * mosaic_size)) + + +def applying_the_filter(_i, _j, _average_brightness): + for n in range(_i, _i + mosaic_size): + for n1 in range(_j, _j + mosaic_size): + rgb_table[n][n1][0] = int(_average_brightness // grayscale_value) * grayscale_value + rgb_table[n][n1][1] = int(_average_brightness // grayscale_value) * grayscale_value + rgb_table[n][n1][2] = int(_average_brightness // grayscale_value) * grayscale_value + + +for i in range(0, height, mosaic_size): + for j in range(0, width, mosaic_size): + applying_the_filter(i, j, count_average_brightness(i, j)) +res = Image.fromarray(rgb_table) res.save('res.jpg') From 6cf35fca9ddf9045fe51cd32f7d2b15154921ed8 Mon Sep 17 00:00:00 2001 From: K-mixam Date: Thu, 25 Nov 2021 09:44:20 +0500 Subject: [PATCH 3/4] third stage --- filter.py | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/filter.py b/filter.py index 5cfab81..f000eef 100644 --- a/filter.py +++ b/filter.py @@ -9,22 +9,12 @@ def count_average_brightness(_i, _j): - average_brightness = 0 - for n in range(_i, _i + mosaic_size): - for n1 in range(_j, _j + mosaic_size): - r = int(rgb_table[n][n1][0]) - g = int(rgb_table[n][n1][1]) - b = int(rgb_table[n][n1][2]) - average_brightness += r//3 + g//3 + b//3 - return int(average_brightness // (mosaic_size * mosaic_size)) + return np.average(rgb_table[_i: _i + mosaic_size, _j: _j + mosaic_size]) def applying_the_filter(_i, _j, _average_brightness): - for n in range(_i, _i + mosaic_size): - for n1 in range(_j, _j + mosaic_size): - rgb_table[n][n1][0] = int(_average_brightness // grayscale_value) * grayscale_value - rgb_table[n][n1][1] = int(_average_brightness // grayscale_value) * grayscale_value - rgb_table[n][n1][2] = int(_average_brightness // grayscale_value) * grayscale_value + rgb_table[_i: _i + mosaic_size, _j: _j + mosaic_size] = int(_average_brightness // grayscale_value)\ + * grayscale_value for i in range(0, height, mosaic_size): From 459953273fb5aa06260895190d8eaf5a87a2f274 Mon Sep 17 00:00:00 2001 From: K-mixam Date: Thu, 25 Nov 2021 09:52:53 +0500 Subject: [PATCH 4/4] fourth stage --- filter.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/filter.py b/filter.py index f000eef..cd65d82 100644 --- a/filter.py +++ b/filter.py @@ -1,6 +1,8 @@ from PIL import Image import numpy as np -img = Image.open("img2.jpg") +file_name = input("Enter the file name ") +file_name_updated = input("Save as... ") +img = Image.open(file_name) rgb_table = np.array(img) height = len(rgb_table) width = len(rgb_table[1]) @@ -13,12 +15,11 @@ def count_average_brightness(_i, _j): def applying_the_filter(_i, _j, _average_brightness): - rgb_table[_i: _i + mosaic_size, _j: _j + mosaic_size] = int(_average_brightness // grayscale_value)\ - * grayscale_value + rgb_table[_i: _i + mosaic_size, _j: _j + mosaic_size] = int(_average_brightness // grayscale_value) * grayscale_value for i in range(0, height, mosaic_size): for j in range(0, width, mosaic_size): applying_the_filter(i, j, count_average_brightness(i, j)) res = Image.fromarray(rgb_table) -res.save('res.jpg') +res.save(file_name_updated)