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

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

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

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

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

Формат ввода
В папке с вашим решением будет лежать файл image.jpg c исходной картинкой.
Формат вывода
Результат сохраните в файл res.jpg в текущей папке.
Примечания
Не забудьте, что значение каждой составляющей цвета — целое число, поэтому результат необходимо округлить.
Для этого воспользуйтесь методом round()
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.03.2018, 20:25
Ответы с готовыми решениями:

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

Чёрно-белое изображение
Используя numpy, без питоновских циклов сконвертируйте цветное изображение в чёрно-белое по формуле: C = 0.2989 * R + 0.5870 * G +...

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

48
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
10.03.2018, 14:19
Лучший ответ Сообщение было отмечено 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  [ТС]
Спасибо огромное! Если вам не трудно то решите те темы которые у меня ещё не решены!
0
19 / 18 / 1
Регистрация: 16.01.2020
Сообщений: 32
07.03.2020, 14:47
Я понимаю, что тема старая, но могу попросить объяснить алгоритм работы кода, пожалуйста?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
07.03.2020, 15:00
Там же всё написано: для каждого пикселя берём три цвета, домножаем на коэффициенты и считаем сумму. Округляем и конвертим в целые. Восстанавливаем размерность.
0
19 / 18 / 1
Регистрация: 16.01.2020
Сообщений: 32
07.03.2020, 15:07
Я имею в виду объяснить суть конструкций. Почему вы делаете np.sum() от перемножения изначального массива и массива k и что значит axis=2. И, хотел спросить, что такое np.repeat()?
0
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
07.03.2020, 18:49
Можно еще так:

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
19 / 18 / 1
Регистрация: 16.01.2020
Сообщений: 32
07.03.2020, 18:51
Большое спасибо)
0
11 / 10 / 1
Регистрация: 24.01.2020
Сообщений: 48
07.03.2020, 21:11
У вас прошли эти решения на тестах?
0
19 / 18 / 1
Регистрация: 16.01.2020
Сообщений: 32
08.03.2020, 09:49
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
Спасибо огромное!!! А то все пробую, и ничего не получается(
0
8 / 8 / 0
Регистрация: 08.03.2020
Сообщений: 20
08.03.2020, 16:01
Добрый день!
Мой код
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
У меня та же проблема

Добавлено через 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
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
08.03.2020, 21:49
А запускать функцию дядя за вас будет?
0
8 / 8 / 0
Регистрация: 08.03.2020
Сообщений: 20
08.03.2020, 21:56
Так дядя и запустил, только из-за леса, из-за гор показал Егор топор.
Ничего не поменялось.(
0
11 / 10 / 1
Регистрация: 24.01.2020
Сообщений: 48
10.03.2020, 19:42
Так там как бы и не нужно вызывать (в задании так написано). Но я попробовал - не проходит.
Ошибка images do not match
Makefile:5: recipe for target 'run' failed
Там скорее всего просто картинка неправильно строится (судя по ошибке)
0
19 / 18 / 1
Регистрация: 16.01.2020
Сообщений: 32
10.03.2020, 20:10
Вот пруф того, что прошло.
Могу поинтересоваться, кто-нибудь из присутствующих сделал задачу "полезные продукты"?)
Миниатюры
Конвертация цветного изображения в черно-белое  
4
8 / 8 / 0
Регистрация: 08.03.2020
Сообщений: 20
10.03.2020, 20:50
Спасибо, друг!
Весь вечер на это задание убил.
0
11 / 10 / 1
Регистрация: 24.01.2020
Сообщений: 48
12.03.2020, 15:05
Спасибо!!! Еще остались добрые люди!
Задачу Полезные продукты я не сделал (вообще не знаю как ее решать)
0
8 / 8 / 0
Регистрация: 08.03.2020
Сообщений: 20
26.03.2020, 21:30
Цитата Сообщение от new-programmer Посмотреть сообщение
Спасибо!!! Еще остались добрые люди!
Задачу Полезные продукты я не сделал (вообще не знаю как ее решать)
Там все просто.
качаешь файл по ссылке.
открываешь его той функцией, которая указана в задании.
ищешь максимум калорий (3 столбец, если считать с 0), минимум сахара (9 столбец), максимум протеина (4 столбец), максимум витамина 2 (20 столбец)
далее находишь продукты по каждому критерию задания и печатаешь в том порядке, как написано в задании
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2020, 21:30
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru