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

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

06.03.2018, 20:25. Показов 56170. Ответов 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
 Аватар для Рыжий Лис
5973 / 3735 / 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
 Аватар для Рыжий Лис
5973 / 3735 / 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
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
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
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru