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

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

06.03.2018, 20:25. Показов 56107. Ответов 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
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
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
5515 / 2868 / 571
Регистрация: 07.11.2019
Сообщений: 4,758
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
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru