Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/268: Рейтинг темы: голосов - 268, средняя оценка - 4.79
10 / 59 / 21
Регистрация: 12.03.2017
Сообщений: 514
1

Конвертация цветного изображения в черно-белое

06.03.2018, 20:25. Показов 51247. Ответов 48
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Используя numpy, без питоновских циклов сконвертируйте цветное изображение в черно-белое по формуле:

C = 0.2989 * R + 0.5870 * G + 0.1140 * B
Считается, что вычисленный таким образом цвет лучше всего подходит для человеческого глаза, поскольку яркость каждой компоненты глаз воспринимает по-разному.

Формат ввода
В папке с вашим решением будет лежать файл image.jpg c исходной картинкой.
Формат вывода
Результат сохраните в файл res.jpg в текущей папке.
Примечания
Не забудьте, что значение каждой составляющей цвета — целое число, поэтому результат необходимо округлить.
Для этого воспользуйтесь методом round()
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.03.2018, 20:25
Ответы с готовыми решениями:

Перевод изображения в черно-белое и multiproccesing
Здравствуйте, форумчане, нужна ваша помощь. Пытаюсь распараллелить данный код (в начале с помощь...

Чёрно-белое изображение
Используя numpy, без питоновских циклов сконвертируйте цветное изображение в чёрно-белое по...

Перевод цветного изображения в черно-белое
Здравствуйте, нужно перевести цветное изображение в черно-белое (не в серо-белое), но я в этом...

Преобразование цветного изображения в черно-белое
Помогите пожалуйста написать программу, выполняющую преобразование цветного изображения в...

48
Просто Лис
Эксперт Python
5965 / 3728 / 1097
Регистрация: 17.05.2012
Сообщений: 10,787
Записей в блоге: 9
10.03.2018, 14:19 2
Лучший ответ Сообщение было отмечено Pavlin234 как решение

Решение

Конвертация изображения средствами numpy

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python3
import numpy as np
from PIL import Image
 
img = Image.open('image.jpg')
arr = np.asarray(img, dtype='uint8')
 
k = np.array([[[0.2989, 0.587, 0.114]]])
sums = np.round(np.sum(arr*k, axis=2)).astype(np.uint8)
arr2 = np.repeat(sums, 3).reshape(arr.shape)
 
img2 = Image.fromarray(arr2)
img2.save('result_bw.png')
Добавлено через 2 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python3
import numpy as np
from PIL import Image
 
img = Image.open('image.jpg')
arr = np.asarray(img, dtype='uint8')
x, y, _ = arr.shape
 
k = np.array([[[0.2989, 0.587, 0.114]]])
arr2 = np.round(np.sum(arr*k, axis=2)).astype(np.uint8).reshape((x, y))
 
img2 = Image.fromarray(arr2)
img2.save('result_bw.png')
1
10 / 59 / 21
Регистрация: 12.03.2017
Сообщений: 514
10.03.2018, 22:29  [ТС] 3
Спасибо огромное! Если вам не трудно то решите те темы которые у меня ещё не решены!
0
18 / 17 / 1
Регистрация: 16.01.2020
Сообщений: 32
07.03.2020, 14:47 4
Я понимаю, что тема старая, но могу попросить объяснить алгоритм работы кода, пожалуйста?
0
Просто Лис
Эксперт Python
5965 / 3728 / 1097
Регистрация: 17.05.2012
Сообщений: 10,787
Записей в блоге: 9
07.03.2020, 15:00 5
Там же всё написано: для каждого пикселя берём три цвета, домножаем на коэффициенты и считаем сумму. Округляем и конвертим в целые. Восстанавливаем размерность.
0
18 / 17 / 1
Регистрация: 16.01.2020
Сообщений: 32
07.03.2020, 15:07 6
Я имею в виду объяснить суть конструкций. Почему вы делаете np.sum() от перемножения изначального массива и массива k и что значит axis=2. И, хотел спросить, что такое np.repeat()?
0
5409 / 2764 / 559
Регистрация: 07.11.2019
Сообщений: 4,513
07.03.2020, 18:49 7
Можно еще так:

1. развернули картинку wxhx3 в матрицу (w*h)x3
2. умножили матрицу на вектор весов-коэффициентов (3x1), получили вектор (w*h)x1
3. свернули вектор в картинку wxh
Python
1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
from PIL import Image
 
img = Image.open('image.jpg')
arr = np.asarray(img, dtype='uint8')
k = np.array([0.2989, 0.587, 0.114])
w, h, _ = arr.shape
arr.reshape(w*h,3)
out=np.matmul(arr, k)
out.reshape(w,h)
img2 = Image.fromarray(out.astype(np.uint8))
img2.save('result_bw.png')
sum от перемножения это есть скалярное произведение векторов.
В моем коде все делает np.matmul
3
18 / 17 / 1
Регистрация: 16.01.2020
Сообщений: 32
07.03.2020, 18:51 8
Большое спасибо)
0
11 / 10 / 1
Регистрация: 24.01.2020
Сообщений: 48
07.03.2020, 21:11 9
У вас прошли эти решения на тестах?
0
18 / 17 / 1
Регистрация: 16.01.2020
Сообщений: 32
08.03.2020, 09:49 10
Python
1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
from PIL import Image
 
img = Image.open('image.jpg')
arr = np.asarray(img, dtype='uint8')
x, y, _ = arr.shape
 
k = np.array([[[0.2989, 0.587, 0.114]]])
arr2 = np.round(np.sum(arr*k, axis=2)).astype(np.uint8).reshape((x, y))
 
img2 = Image.fromarray(arr2)
img2.save('result_bw.png')
вот это да
1
11 / 10 / 1
Регистрация: 24.01.2020
Сообщений: 48
08.03.2020, 12:51 11
Спасибо огромное!!! А то все пробую, и ничего не получается(
0
7 / 7 / 0
Регистрация: 08.03.2020
Сообщений: 20
08.03.2020, 16:01 12
Добрый день!
Мой код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from PIL import Image
import numpy as np
 
 
def bw_convert():
    img = Image.open('image.jpg')
    image = np.asarray(img)
    # узнаем размерность массива
    x, y, _ = image.shape
    k = np.array([0.2989, 0.587, 0.114])
    arr = np.round(np.sum(image * k, axis=2)).astype(np.uint8).reshape((x, y))
    image2 = Image.fromarray(arr)
    image2.save('res.jpg')
Проверяющая система выдает ошибку: images do not match
Makefile:5: recipe for target 'run' failed
Кто-нибудь знает, из-за чего? код не отличается от написанного выше
0
11 / 10 / 1
Регистрация: 24.01.2020
Сообщений: 48
08.03.2020, 17:52 13
У меня та же проблема

Добавлено через 7 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy as np
from PIL import Image
 
 
def bw_convert():
    img = Image.open('image.jpg')
    arr = np.asarray(img, dtype='uint8')
    x, y, _ = arr.shape
 
    k = np.array([[[0.2989, 0.587, 0.114]]])
    arr2 = np.round(np.sum(arr * k, axis=2)).astype(np.uint8).reshape((x, y))
 
    img2 = Image.fromarray(arr2)
    img2.save('res.jpg')
Вот я оформил в виде функции
Но выдает ошибку Makefile:5: recipe for target 'run' failed
0
5409 / 2764 / 559
Регистрация: 07.11.2019
Сообщений: 4,513
08.03.2020, 21:49 14
А запускать функцию дядя за вас будет?
0
7 / 7 / 0
Регистрация: 08.03.2020
Сообщений: 20
08.03.2020, 21:56 15
Так дядя и запустил, только из-за леса, из-за гор показал Егор топор.
Ничего не поменялось.(
0
11 / 10 / 1
Регистрация: 24.01.2020
Сообщений: 48
10.03.2020, 19:42 16
Так там как бы и не нужно вызывать (в задании так написано). Но я попробовал - не проходит.
Ошибка images do not match
Makefile:5: recipe for target 'run' failed
Там скорее всего просто картинка неправильно строится (судя по ошибке)
0
18 / 17 / 1
Регистрация: 16.01.2020
Сообщений: 32
10.03.2020, 20:10 17
Вот пруф того, что прошло.
Могу поинтересоваться, кто-нибудь из присутствующих сделал задачу "полезные продукты"?)
Миниатюры
Конвертация цветного изображения в черно-белое  
4
7 / 7 / 0
Регистрация: 08.03.2020
Сообщений: 20
10.03.2020, 20:50 18
Спасибо, друг!
Весь вечер на это задание убил.
0
11 / 10 / 1
Регистрация: 24.01.2020
Сообщений: 48
12.03.2020, 15:05 19
Спасибо!!! Еще остались добрые люди!
Задачу Полезные продукты я не сделал (вообще не знаю как ее решать)
0
7 / 7 / 0
Регистрация: 08.03.2020
Сообщений: 20
26.03.2020, 21:30 20
Цитата Сообщение от new-programmer Посмотреть сообщение
Спасибо!!! Еще остались добрые люди!
Задачу Полезные продукты я не сделал (вообще не знаю как ее решать)
Там все просто.
качаешь файл по ссылке.
открываешь его той функцией, которая указана в задании.
ищешь максимум калорий (3 столбец, если считать с 0), минимум сахара (9 столбец), максимум протеина (4 столбец), максимум витамина 2 (20 столбец)
далее находишь продукты по каждому критерию задания и печатаешь в том порядке, как написано в задании
1
26.03.2020, 21:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2020, 21:30
Помогаю со студенческими работами здесь

Перевод цветного изображения в черно-белое
Нуждаюсь в помощи для реализации такой задачи: визуализировать изображение в оттенки серого. Qt для...

Преобразование изображения в чёрно-белое
Доброго времени суток. У меня такая проблемка. Нужно чтобы при нажатии на кнопку выбранная картинка...

Перевод изображения в черно-белое используя TrackBar
Всем привет, помогите пожалуйста: нужно создать функцию, переводящую изображение в черно-белый...

Преобразование изображения градаций яркости в черно-белое (монохромное)
Всем доброго дня! Уже который день мучаюсь с одним заданием по лабораторной работе. Задание...

Убрать пятна, касающиеся края изображения. Изображение черно-белое
Здравствуйте! У меня два вопроса... 1) Подскажите пожалуйста если я загружаю картинку BMP c...

Черно-белое изображение
Здравствуйте, возникла проблема создание сегментированного изображения.... Нашёл код для...

черно-белое изображение
Написать программу непосредственной свертки двух черно-белых изображений кругов.(без циклов). ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru