From 70fcbb8b88ac6ddb17d8e385e20d59970bdc0978 Mon Sep 17 00:00:00 2001 From: udavspokoinyi <60442562+udavspokoinyi@users.noreply.github.com> Date: Sat, 13 Nov 2021 16:32:57 +0500 Subject: [PATCH 1/7] Update filter.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Исправили с помощью функции !_переполнением беззнакового целого numpy.uint8. !_В одном месте я запутался с именами переменных. Неверно считаю компоненты серого цвета (забываю поделить на 3). !_Неверно работаю с граничными условиями, в результате чего справа и внизу остались необработанные полосы по 10 пикселей. --- filter.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/filter.py b/filter.py index 4150df2..2245b9d 100644 --- a/filter.py +++ b/filter.py @@ -5,17 +5,18 @@ a = len(arr) a1 = len(arr[1]) i = 0 -while i < a - 11: + +while i < a : #Неверно работаю с граничными условиями, в результате чего справа и внизу остались необработанные полосы по 10 пикселей. j = 0 - while j < a1 - 11: + while j < a1 : #Неверно работаю с граничными условиями, в результате чего справа и внизу остались необработанные полосы по 10 пикселей. s = 0 for n in range(i, i + 10): for n1 in range(j, j + 10): - n1 = arr[n][n1][0] + n0 = arr[n][n1][0] #В одном месте я запутался с именами переменных. n2 = arr[n][n1][1] n3 = arr[n][n1][2] - M = n1 + n2 + n3 - s += M + M = n0 + n2 + n3 #В одном месте я запутался с именами переменных. + s += M / 3 #Неверно считаю компоненты серого цвета (забываю поделить на 3). s = int(s // 100) for n in range(i, i + 10): for n1 in range(j, j + 10): From 82d0a8cddc5f3745b4374f62d4c9b3c48d6b73d2 Mon Sep 17 00:00:00 2001 From: udavspokoinyi <60442562+udavspokoinyi@users.noreply.github.com> Date: Sat, 13 Nov 2021 16:49:31 +0500 Subject: [PATCH 2/7] Update filter.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit !_PEP8. !_Именование переменных. !_Возможность управлять размерами мозайки (сейчас — только 10x10). !_Возможность управлять градациями серого (сейчас — с шагом 50). Лучше сделать просто в виде задания количества шагов. Например: 4 градации, 6 градаций. !_Выделение функций. --- filter.py | 53 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 14 deletions(-) diff --git a/filter.py b/filter.py index 2245b9d..edcdc3c 100644 --- a/filter.py +++ b/filter.py @@ -2,28 +2,53 @@ import numpy as np img = Image.open("img2.jpg") arr = np.array(img) -a = len(arr) -a1 = len(arr[1]) +m_w = len(arr) +m_h = len(arr[1]) i = 0 +step = None +#ПЕРЕВОД В СТИЛЬ PEP8 -while i < a : #Неверно работаю с граничными условиями, в результате чего справа и внизу остались необработанные полосы по 10 пикселей. + +#ыделение функций + + +def find_step(n): + return int(255 / (n - 1) - 1 if 255 % (n - 1) == 0 else 255 / (n - 1)) #градации серого + + +#выделение функций +def find_av_brightness(i, j, arr, m_h, m_w, step): + while i < a : j = 0 - while j < a1 : #Неверно работаю с граничными условиями, в результате чего справа и внизу остались необработанные полосы по 10 пикселей. + while j < a1 : s = 0 for n in range(i, i + 10): for n1 in range(j, j + 10): - n0 = arr[n][n1][0] #В одном месте я запутался с именами переменных. + n0 = arr[n][n1][0] n2 = arr[n][n1][1] n3 = arr[n][n1][2] - M = n0 + n2 + n3 #В одном месте я запутался с именами переменных. - s += M / 3 #Неверно считаю компоненты серого цвета (забываю поделить на 3). + M = n0 + n2 + n3 + s += M/3 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 + return s +#выделение функций + + +def do_mosaic(i, j, arr, m_h, m_w, step):#мозайка на ручном управление + while i < a : + j = 0 + while j < a1 : + 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 + return i + + +inp_sizes = input('Введите ширину и высоту мозайки (например: 100,100): ')#мозайка на ручном управление +num_grad = int(input('Enter the number of gradations(for example: 6): '))#шаги серого ручное управление res = Image.fromarray(arr) res.save('res.jpg') From e8e9f0aaf257d9e41a689ed4683b4ec00a35aff3 Mon Sep 17 00:00:00 2001 From: udavspokoinyi <60442562+udavspokoinyi@users.noreply.github.com> Date: Sat, 13 Nov 2021 16:51:39 +0500 Subject: [PATCH 3/7] Update filter.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit !_По возможности убрать ручные циклы, заменив их матричными преобразованиями. этап 3 --- filter.py | 52 +++++++++++++++------------------------------------- 1 file changed, 15 insertions(+), 37 deletions(-) diff --git a/filter.py b/filter.py index edcdc3c..3e576a0 100644 --- a/filter.py +++ b/filter.py @@ -2,53 +2,31 @@ import numpy as np img = Image.open("img2.jpg") arr = np.array(img) -m_w = len(arr) -m_h = len(arr[1]) -i = 0 -step = None -#ПЕРЕВОД В СТИЛЬ PEP8 - - -#ыделение функций def find_step(n): - return int(255 / (n - 1) - 1 if 255 % (n - 1) == 0 else 255 / (n - 1)) #градации серого - + return int(255 / (n - 1) - 1 if 255 % (n - 1) == 0 else 255 / (n - 1)) +#Преобразование в матричный вид -#выделение функций def find_av_brightness(i, j, arr, m_h, m_w, step): - while i < a : - j = 0 - while j < a1 : - s = 0 - for n in range(i, i + 10): - for n1 in range(j, j + 10): - n0 = arr[n][n1][0] - n2 = arr[n][n1][1] - n3 = arr[n][n1][2] - M = n0 + n2 + n3 - s += M/3 - s = int(s // 100) - return s -#выделение функций + br = 0. + br += arr[i: i + m_h, j: j + m_w, :].sum() / 3 + br //= m_h * m_w + br -= br % step + return br +#Преобразование в матричный вид +def do_mosaic(arr, m_h, m_w, step): + for i in range(0, len(arr), m_h): + for j in range(0, len(arr[1]), m_w): + brightness = find_av_brightness(i, j, arr, m_h, m_w, step) + arr[i: i + m_h, j: j + m_w, :] = brightness -def do_mosaic(i, j, arr, m_h, m_w, step):#мозайка на ручном управление - while i < a : - j = 0 - while j < a1 : - 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 - return i inp_sizes = input('Введите ширину и высоту мозайки (например: 100,100): ')#мозайка на ручном управление num_grad = int(input('Enter the number of gradations(for example: 6): '))#шаги серого ручное управление +e_h, e_w = map(int, inp_sizes.split(',')) +do_mosaic(inp_im, e_h, e_w, find_step(num_grad)) #градация серого и мазайка ручное управление через матрицу res = Image.fromarray(arr) res.save('res.jpg') From 70aa9de77e8e758f8501b8d908922e5d928b591f Mon Sep 17 00:00:00 2001 From: udavspokoinyi <60442562+udavspokoinyi@users.noreply.github.com> Date: Sat, 13 Nov 2021 16:56:39 +0500 Subject: [PATCH 4/7] Update filter.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit !_Возможно, переписать в консольную утилиту, которой на вход подаются имена исходного изображения и результата. Сейчас чтобы заставить код работать с другой картинкой, его надо исправлять. --- filter.py | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/filter.py b/filter.py index 3e576a0..cf2f1e6 100644 --- a/filter.py +++ b/filter.py @@ -1,12 +1,10 @@ from PIL import Image -import numpy as np -img = Image.open("img2.jpg") -arr = np.array(img) - +#переолнение numpy +# ручной ввод изображения! def find_step(n): return int(255 / (n - 1) - 1 if 255 % (n - 1) == 0 else 255 / (n - 1)) -#Преобразование в матричный вид + def find_av_brightness(i, j, arr, m_h, m_w, step): br = 0. @@ -14,7 +12,7 @@ def find_av_brightness(i, j, arr, m_h, m_w, step): br //= m_h * m_w br -= br % step return br -#Преобразование в матричный вид + def do_mosaic(arr, m_h, m_w, step): for i in range(0, len(arr), m_h): @@ -23,10 +21,22 @@ def do_mosaic(arr, m_h, m_w, step): arr[i: i + m_h, j: j + m_w, :] = brightness +inp_im_names = input('Введите название изображение ' + 'Ввод выглядит как (например: img2,res): ') \ + .split(',') + inp_sizes = input('Введите ширину и высоту мозайки (например: 100,100): ')#мозайка на ручном управление + + num_grad = int(input('Enter the number of gradations(for example: 6): '))#шаги серого ручное управление +#градация серого и мазайка ручное управление через матрицу + + e_h, e_w = map(int, inp_sizes.split(',')) -do_mosaic(inp_im, e_h, e_w, find_step(num_grad)) #градация серого и мазайка ручное управление через матрицу -res = Image.fromarray(arr) -res.save('res.jpg') +do_mosaic(inp_im, e_h, e_w, find_step(num_grad)) + +res = Image.fromarray(inp_im) + + +res.save(inp_im_names[1] + ".jpg") From 724864eca42d16c5f85aca9fd6e0acc3585043c5 Mon Sep 17 00:00:00 2001 From: udavspokoinyi <60442562+udavspokoinyi@users.noreply.github.com> Date: Sat, 13 Nov 2021 17:14:23 +0500 Subject: [PATCH 5/7] Update filter.py micro fix --- filter.py | 1 + 1 file changed, 1 insertion(+) diff --git a/filter.py b/filter.py index cf2f1e6..7839192 100644 --- a/filter.py +++ b/filter.py @@ -20,6 +20,7 @@ def do_mosaic(arr, m_h, m_w, step): brightness = find_av_brightness(i, j, arr, m_h, m_w, step) arr[i: i + m_h, j: j + m_w, :] = brightness +inp_im = np.array(Image.open(satisfy_content[0] + ".jpg")) inp_im_names = input('Введите название изображение ' 'Ввод выглядит как (например: img2,res): ') \ From 0aec98134094cd1f0c05e618d5168d59028af070 Mon Sep 17 00:00:00 2001 From: udavspokoinyi <60442562+udavspokoinyi@users.noreply.github.com> Date: Sat, 13 Nov 2021 17:17:27 +0500 Subject: [PATCH 6/7] Update filter.py english adaptation --- filter.py | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/filter.py b/filter.py index 7839192..37f54ed 100644 --- a/filter.py +++ b/filter.py @@ -20,24 +20,17 @@ def do_mosaic(arr, m_h, m_w, step): brightness = find_av_brightness(i, j, arr, m_h, m_w, step) arr[i: i + m_h, j: j + m_w, :] = brightness -inp_im = np.array(Image.open(satisfy_content[0] + ".jpg")) - -inp_im_names = input('Введите название изображение ' - 'Ввод выглядит как (например: img2,res): ') \ +inp_im_names = input('Enter the names of the source image (jpg) and the ' + 'result separated by comma (for example: img2,res): ') \ .split(',') +inp_sizes = input('Enter the height and width of the mosaic element ' + 'separated by comma (for example: 10,10): ') +num_grad = int(input('Enter the number of gradations(for example: 6): ')) - -inp_sizes = input('Введите ширину и высоту мозайки (например: 100,100): ')#мозайка на ручном управление - - -num_grad = int(input('Enter the number of gradations(for example: 6): '))#шаги серого ручное управление -#градация серого и мазайка ручное управление через матрицу - +inp_im = np.array(Image.open(inp_im_names[0] + ".jpg")) e_h, e_w = map(int, inp_sizes.split(',')) do_mosaic(inp_im, e_h, e_w, find_step(num_grad)) res = Image.fromarray(inp_im) - - res.save(inp_im_names[1] + ".jpg") From ff2881c7e8e942167a625165ae80d0b16f4bb203 Mon Sep 17 00:00:00 2001 From: udavspokoinyi <60442562+udavspokoinyi@users.noreply.github.com> Date: Sat, 13 Nov 2021 17:20:28 +0500 Subject: [PATCH 7/7] Update filter.py np_fixed --- filter.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/filter.py b/filter.py index 37f54ed..e76d85a 100644 --- a/filter.py +++ b/filter.py @@ -1,6 +1,6 @@ +import numpy as np from PIL import Image -#переолнение numpy -# ручной ввод изображения! + def find_step(n): return int(255 / (n - 1) - 1 if 255 % (n - 1) == 0 else 255 / (n - 1)) @@ -20,6 +20,7 @@ def do_mosaic(arr, m_h, m_w, step): brightness = find_av_brightness(i, j, arr, m_h, m_w, step) arr[i: i + m_h, j: j + m_w, :] = brightness + inp_im_names = input('Enter the names of the source image (jpg) and the ' 'result separated by comma (for example: img2,res): ') \ .split(',') @@ -33,4 +34,4 @@ def do_mosaic(arr, m_h, m_w, step): do_mosaic(inp_im, e_h, e_w, find_step(num_grad)) res = Image.fromarray(inp_im) -res.save(inp_im_names[1] + ".jpg") +res.save(inp_im_names[1] + ".jpg") \ No newline at end of file