From 47511c6a76cb6dc150e598b1c999d6120adc8276 Mon Sep 17 00:00:00 2001 From: foursid Date: Tue, 16 Nov 2021 11:36:44 +0500 Subject: [PATCH 1/4] =?UTF-8?q?=D0=AD=D1=82=D0=B0=D0=BF=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- filter.py | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/filter.py b/filter.py index 4150df2..91c0f15 100644 --- a/filter.py +++ b/filter.py @@ -1,28 +1,30 @@ from PIL import Image import numpy as np -img = Image.open("img2.jpg") -arr = np.array(img) -a = len(arr) -a1 = len(arr[1]) + +np.seterr(over='ignore') +arr = np.array(Image.open("img2.jpg")) +a, a1 = len(arr), len(arr[1]) i = 0 -while i < a - 11: + +while i < a: j = 0 - while j < a1 - 11: + while j < a1: 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] + for x in range(i, i + 10): + for y in range(j, j + 10): + n1 = arr[x][y][0] / 3 + n2 = arr[x][y][1] / 3 + n3 = arr[x][y][2] / 3 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 + for x in range(i, i + 10): + for y in range(j, j + 10): + arr[x][y][0] = int(s // 50) * 50 + arr[x][y][1] = int(s // 50) * 50 + arr[x][y][2] = int(s // 50) * 50 + j += 10 + i += 10 + res = Image.fromarray(arr) -res.save('res.jpg') +res.save('res.jpg') \ No newline at end of file From e3f5fabf09bace1e0f0cefed0117dc945ff124db Mon Sep 17 00:00:00 2001 From: foursid Date: Tue, 16 Nov 2021 11:45:20 +0500 Subject: [PATCH 2/4] =?UTF-8?q?=D0=AD=D1=82=D0=B0=D0=BF=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- filter.py | 57 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/filter.py b/filter.py index 91c0f15..fbbfd2b 100644 --- a/filter.py +++ b/filter.py @@ -1,30 +1,35 @@ from PIL import Image import numpy as np + +def pixel_art_filter(mosaic_side: int, step: int): + img_length, img_height = len(img_arr), len(img_arr[1]) + segment_x = 0 + while segment_x < img_length: + segment_y = 0 + while segment_y < img_height: + avg_brightness = find_average_brightness(segment_x, segment_y, mosaic_side) + pixel_coloring(avg_brightness, segment_x, segment_y, mosaic_side, step) + segment_y += mosaic_side + segment_x += mosaic_side + + +def find_average_brightness(segment_x, segment_y, mosaic_side): + result = 0 + for x in range(segment_x, segment_x + mosaic_side): + for y in range(segment_y, segment_y + mosaic_side): + result += sum(img_arr[x][y][range(3)] / 3) + return int(result) // (mosaic_side * mosaic_side) + + +def pixel_coloring(avg_brightness, segment_x, segment_y, mosaic_side, grayscale): + for x in range(segment_x, segment_x + mosaic_side): + for y in range(segment_y, segment_y + mosaic_side): + img_arr[x][y][range(3)] = int(avg_brightness // grayscale) * grayscale + + np.seterr(over='ignore') -arr = np.array(Image.open("img2.jpg")) -a, a1 = len(arr), len(arr[1]) -i = 0 - -while i < a: - j = 0 - while j < a1: - s = 0 - for x in range(i, i + 10): - for y in range(j, j + 10): - n1 = arr[x][y][0] / 3 - n2 = arr[x][y][1] / 3 - n3 = arr[x][y][2] / 3 - M = n1 + n2 + n3 - s += M - s = int(s // 100) - for x in range(i, i + 10): - for y in range(j, j + 10): - arr[x][y][0] = int(s // 50) * 50 - arr[x][y][1] = int(s // 50) * 50 - arr[x][y][2] = int(s // 50) * 50 - j += 10 - i += 10 - -res = Image.fromarray(arr) -res.save('res.jpg') \ No newline at end of file +img_arr = np.array(Image.open("img2.jpg")) +pixel_art_filter(int(input()), int(input())) +filtered_img = Image.fromarray(img_arr) +filtered_img.save('res.jpg') From d7fc654dc7ee18f1f3a85f13411f30d3135e808b Mon Sep 17 00:00:00 2001 From: foursid Date: Tue, 16 Nov 2021 15:02:40 +0500 Subject: [PATCH 3/4] =?UTF-8?q?=D0=AD=D1=82=D0=B0=D0=BF=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- filter.py | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/filter.py b/filter.py index fbbfd2b..eaec493 100644 --- a/filter.py +++ b/filter.py @@ -4,28 +4,22 @@ def pixel_art_filter(mosaic_side: int, step: int): img_length, img_height = len(img_arr), len(img_arr[1]) - segment_x = 0 - while segment_x < img_length: - segment_y = 0 - while segment_y < img_height: - avg_brightness = find_average_brightness(segment_x, segment_y, mosaic_side) - pixel_coloring(avg_brightness, segment_x, segment_y, mosaic_side, step) - segment_y += mosaic_side - segment_x += mosaic_side + 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(segment_x, segment_y, mosaic_side): +def find_average_brightness(x, y, mosaic_side): result = 0 - for x in range(segment_x, segment_x + mosaic_side): - for y in range(segment_y, segment_y + mosaic_side): - result += sum(img_arr[x][y][range(3)] / 3) + 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(avg_brightness, segment_x, segment_y, mosaic_side, grayscale): - for x in range(segment_x, segment_x + mosaic_side): - for y in range(segment_y, segment_y + mosaic_side): - img_arr[x][y][range(3)] = int(avg_brightness // grayscale) * grayscale +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 np.seterr(over='ignore') From b785697996473a3cddd1fd251a1c786ce6eaa46d Mon Sep 17 00:00:00 2001 From: foursid Date: Tue, 16 Nov 2021 15:29:08 +0500 Subject: [PATCH 4/4] =?UTF-8?q?=D0=AD=D1=82=D0=B0=D0=BF=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- filter.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/filter.py b/filter.py index eaec493..3d65ab1 100644 --- a/filter.py +++ b/filter.py @@ -22,8 +22,21 @@ def pixel_coloring(x, y, mosaic_side, step): 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') -img_arr = np.array(Image.open("img2.jpg")) -pixel_art_filter(int(input()), int(input())) -filtered_img = Image.fromarray(img_arr) -filtered_img.save('res.jpg') +start_program()