From 6587c535efcdcf66f1c4e33f5c4137d9beb4603f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B3=D0=BE=D1=80=20=D0=9F=D0=BB=D0=BE=D1=82=D0=BD?= =?UTF-8?q?=D0=B8=D0=BA=D0=BE=D0=B2?= <94371922+EgorPlotnikov@users.noreply.github.com> Date: Mon, 15 Nov 2021 18:18:00 +0500 Subject: [PATCH 1/5] =?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 | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/filter.py b/filter.py index 4150df2..807460a 100644 --- a/filter.py +++ b/filter.py @@ -1,27 +1,28 @@ from PIL import Image import numpy as np +np.seterr(over='ignore') img = Image.open("img2.jpg") arr = np.array(img) a = len(arr) a1 = 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 x 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[x][n1][0] = int(s // 50) * 50 + arr[x][n1][1] = int(s // 50) * 50 + arr[x][n1][2] = int(s // 50) * 50 j = j + 10 i = i + 10 res = Image.fromarray(arr) From 1cd2359cdb7920e13c8f6e2b4697eb43110d5dcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B3=D0=BE=D1=80=20=D0=9F=D0=BB=D0=BE=D1=82=D0=BD?= =?UTF-8?q?=D0=B8=D0=BA=D0=BE=D0=B2?= <94371922+EgorPlotnikov@users.noreply.github.com> Date: Mon, 15 Nov 2021 18:21:41 +0500 Subject: [PATCH 2/5] =?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 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/filter.py b/filter.py index 807460a..802f1e6 100644 --- a/filter.py +++ b/filter.py @@ -18,11 +18,11 @@ M = n1 + n2 + n3 s += M s = int(s // 100) - for x in range(i, i + 10): + for n in range(i, i + 10): for n1 in range(j, j + 10): - arr[x][n1][0] = int(s // 50) * 50 - arr[x][n1][1] = int(s // 50) * 50 - arr[x][n1][2] = int(s // 50) * 50 + 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) From 1db31391362cb6a5b3893bca0a72186a2ab0d0c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B3=D0=BE=D1=80=20=D0=9F=D0=BB=D0=BE=D1=82=D0=BD?= =?UTF-8?q?=D0=B8=D0=BA=D0=BE=D0=B2?= <94371922+EgorPlotnikov@users.noreply.github.com> Date: Tue, 16 Nov 2021 13:21:56 +0500 Subject: [PATCH 3/5] =?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 | 61 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 24 deletions(-) diff --git a/filter.py b/filter.py index 802f1e6..e64a6a4 100644 --- a/filter.py +++ b/filter.py @@ -1,29 +1,42 @@ from PIL import Image import numpy as np + + +def find_median(img_code, x, y): + n1 = img_code[x][y][0] / 3 + n2 = img_code[x][y][1] / 3 + n3 = img_code[x][y][2] / 3 + median = n1 + n2 + n3 + return median + + np.seterr(over='ignore') -img = Image.open("img2.jpg") -arr = np.array(img) -a = len(arr) -a1 = len(arr[1]) +source_img = Image.open("img2.jpg") +img_code = np.array(source_img) +count_x = len(img_code) +count_y = len(img_code[1]) + +print("Введите размер мозаики: \n(Рекомендуемый размер мозаики - 10, " + "возможные значения - 1, 2, 3, 5, 6, 10, 15, 25, 30, 50, 75, 125, 150, 250, 375, 750)") +mosaic_size = int(input()) +print("Введите, насколько будет детализировано изображение от 1 до 100. 1 - высокая детализация, 100 - низкая: ") +grey = int(input()) + i = 0 -while i < a: +while i < count_x: 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 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') + while j < count_y: + sum_m = 0 + for x in range(i, i + mosaic_size): + for y in range(j, j + mosaic_size): + sum_m += find_median(img_code, x, y) + sum_m = int(sum_m // 100) + for k in range(i, i + mosaic_size): + for m in range(j, j + mosaic_size): + img_code[k][m][0] = int(sum_m // grey) * grey + img_code[k][m][1] = int(sum_m // grey) * grey + img_code[k][m][2] = int(sum_m // grey) * grey + j = j + mosaic_size + i = i + mosaic_size +result = Image.fromarray(img_code) +result.save('res.jpg') From 341385448d7c41a4a37118c08e21051acddea1d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B3=D0=BE=D1=80=20=D0=9F=D0=BB=D0=BE=D1=82=D0=BD?= =?UTF-8?q?=D0=B8=D0=BA=D0=BE=D0=B2?= <94371922+EgorPlotnikov@users.noreply.github.com> Date: Mon, 22 Nov 2021 14:38:01 +0500 Subject: [PATCH 4/5] =?UTF-8?q?=D0=AD=D1=82=D0=B0=D0=BF=203=20=D0=B8=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- filter.py | 49 ++++++++++++++++++------------------------------- 1 file changed, 18 insertions(+), 31 deletions(-) diff --git a/filter.py b/filter.py index e64a6a4..2c04387 100644 --- a/filter.py +++ b/filter.py @@ -2,41 +2,28 @@ import numpy as np -def find_median(img_code, x, y): - n1 = img_code[x][y][0] / 3 - n2 = img_code[x][y][1] / 3 - n3 = img_code[x][y][2] / 3 - median = n1 + n2 + n3 - return median +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("img2.jpg") +source_img = Image.open(input("Введите имя файла, которое хотите конвертировать: ")) +mosaic_size = int(input("Введите размер мозаики: ")) +grey = int(input("Введите количество градаций серого: ")) + img_code = np.array(source_img) count_x = len(img_code) count_y = len(img_code[1]) +grey_size = 255 // grey -print("Введите размер мозаики: \n(Рекомендуемый размер мозаики - 10, " - "возможные значения - 1, 2, 3, 5, 6, 10, 15, 25, 30, 50, 75, 125, 150, 250, 375, 750)") -mosaic_size = int(input()) -print("Введите, насколько будет детализировано изображение от 1 до 100. 1 - высокая детализация, 100 - низкая: ") -grey = int(input()) - -i = 0 -while i < count_x: - j = 0 - while j < count_y: - sum_m = 0 - for x in range(i, i + mosaic_size): - for y in range(j, j + mosaic_size): - sum_m += find_median(img_code, x, y) - sum_m = int(sum_m // 100) - for k in range(i, i + mosaic_size): - for m in range(j, j + mosaic_size): - img_code[k][m][0] = int(sum_m // grey) * grey - img_code[k][m][1] = int(sum_m // grey) * grey - img_code[k][m][2] = int(sum_m // grey) * grey - j = j + mosaic_size - i = i + mosaic_size -result = Image.fromarray(img_code) -result.save('res.jpg') +res = Image.fromarray(do_mosaic(img_code, mosaic_size, grey_size)) +res.save(input("Введите имя файла, в которой хотите сохранить результат: ")) From a630d7fd09fab5ac64961374cc515360b8af3583 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B3=D0=BE=D1=80=20=D0=9F=D0=BB=D0=BE=D1=82=D0=BD?= =?UTF-8?q?=D0=B8=D0=BA=D0=BE=D0=B2?= <94371922+EgorPlotnikov@users.noreply.github.com> Date: Mon, 22 Nov 2021 17:22:20 +0500 Subject: [PATCH 5/5] =?UTF-8?q?=D0=AD=D1=82=D0=B0=D0=BF=203=20=D0=B8=204?= =?UTF-8?q?=20NEW?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- filter.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/filter.py b/filter.py index 2c04387..c4a87b5 100644 --- a/filter.py +++ b/filter.py @@ -21,8 +21,6 @@ def find_average(img_part, size, grey_size): grey = int(input("Введите количество градаций серого: ")) img_code = np.array(source_img) -count_x = len(img_code) -count_y = len(img_code[1]) grey_size = 255 // grey res = Image.fromarray(do_mosaic(img_code, mosaic_size, grey_size))