Преобразование каждой четной строки изображения в градации серого цвета
Задача: Написать функцию, которая каждую чётную строку изображения переводит в градации серого цвета. Я написал код, который переводит каждый четный СТОЛБЕЦ в градации серого цвета. Как мне грамотно изменить код, чтобы переводить строки, при условии что изображение не квадратное? Спасибо.
import matplotlib.pyplot as plt
from PIL import Image, ImageDraw # Подключим необходимые библиотеки.
# fig, plt
fig, (ax1) = plt.subplots(
nrows=1, ncols=2,
figsize=(16, 12)
)
plt.subplots_adjust(wspace=0.3, hspace=0.3)
# ax1
image = Image.open("p11.jpg") # Открываем изображение - оригинал.
image_r = Image.open("p11.jpg") # Открываем изображение - для преобразования.
draw = ImageDraw.Draw(image_r) # Создаем инструмент для рисования.
width = image_r.size[0] # Определяем ширину.
height = image_r.size[1] # Определяем высоту.
pix = image_r.load() # Выгружаем значения пикселей.
step = 5 # Шаг отрисовки серых полос.
for i in range(width):
if (i / step) % 2 == 0:
for j in range(height):
a = pix[i, j][0]
b = pix[i, j][1]
c = pix[i, j][2]
S = (a + b + c) // 3
draw.point((i, j), (S, S, S))
ax1[0].imshow(image)
ax1[1].imshow(image_r)
ax1[0].axis('off')
ax1[1].axis('off')
del draw
plt.show()
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Как-то так должно прокатить:
for j in range(height):
if (j / step) % 2 == 0:
for i in range(width):
a = pix[i, j][0]
b = pix[i, j][1]
c = pix[i, j][2]
S = (a + b + c) // 3
draw.point((i, j), (S, S, S))