2014-10-20 2 views
0

Я пытаюсь изменить RGB для общего изображения для проекта. В настоящее время я работаю с тестовым файлом, прежде чем применять его к фактическому изображению. Я хочу проверить разные значения RGB, но сначала хотел бы начать со среднего значения всех трех. Как мне это сделать? У меня есть другие модули, такие как scipy, numpy, matplotlib и т. Д., Если это необходимо. БлагодаряОбработка изображений Python (PIL) - изменение общего RGB изображения

from PIL import Image, ImageFilter 

test = Image.open('/Users/MeganRCunninghan/Pictures/4th-of-July-Wallpaper.ppm') 
test.show() 
test.getrgb() 

ответ

0

Если предположить, что изображение хранится в виде numpy.ndarray (Test этого с типом печати (тест)) ...

Ваше изображение будет представлен массивом NxMx3. В основном это означает, что у вас есть изображение N на M с глубиной цвета 3 ваших значений RGB. Взяв среднее из этих 3, вы оставите вас с массивом NxMx1, где 1 теперь является средней интенсивностью. Numpy делает это очень хорошо:

test = test.mean(2) 

Параметр, заданный, 2, определяет измерение, чтобы принять среднее значение. Это может быть либо 0, 1, либо 2, потому что ваша матрица изображений 3-мерная. Это должно возвращать массив NxM. В основном вы останетесь с серой шкалой (цветной глубиной 1) изображения. Попробуйте показать возвращаемое значение! Если вы получаете Nx3 или Mx3, вы знаете, что вы только что взяли среднее значение по неправильной оси. Обратите внимание, что вы можете проверить размеры Numpy массива с:

test.shape 

Форма будет кортеж, описывающий размеры вашего изображения.

+0

Я был в состоянии сделать это успешно, как бы я мог отображать или видеть изображение с этим изменением? – Megan

+1

По некоторым исследованиям кажется, что PIL использует свой собственный тип изображения, а не использует массив numpy для хранения изображений. Посмотрите документацию по типу изображения [здесь] (http://effbot.org/imagingbook/image.htm), кажется, что нет никакого «среднего» метода, поэтому то, что я написал выше, может не работать. Однако посмотрите на эту страницу и прочитайте метод «convert». Это обеспечит то, что вам нужно. Попробуйте 'test = test.convert (mode)', а затем 'test.show()' В документации не описывается, что «режим» должен быть очень хорошим, поэтому вам нужно попробовать разные значения, но один из них должен преобразовать в оттенки серого для вас. –

+0

Я попробую! Я видел метод конвертации, когда я проводил какое-то исследование, но не был уверен, применил ли он, Ill дал ему шанс поблагодарить вас – Megan

Смежные вопросы