Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 13, 2011 13:24:19

asv13
От:
Зарегистрирован: 2007-01-22
Сообщения: 130
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение из массива.

Levelup
Просто не понимаю, как в массиве определяются цвета
Каждое значение в массиве раскладывается декодером RGBA на четыре числа.

x, y = 511, 510
print ‘data=’, image
print ‘colour=’,pilImage.getpixel((x,y))

data= 260610
colour= (255, 1, 0, 0)

Собственно такой исходный массив, наверное малые диапазон даёт больше первого - красного цвета

Вот вам зеленые цвета -
image = numpy.array()

Или синие -
image = numpy.array()



Отредактировано (Янв. 13, 2011 13:30:35)

Офлайн

#2 Янв. 13, 2011 15:07:37

Levelup
От:
Зарегистрирован: 2011-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение из массива.

Тогда каким образом можно создать 8 битный массив, из которого можно получить разноцветное изображение. Я так понимаю RGBA и RGB используется только для 32 бит.
В данном случае выдает ошибку ValueError: buffer is not large enough, если меняю на uint32, то получаю изображение. Тогда какой режим использовать в данном случае, чтобы получить цветное изображение?

w = h = 512
i, j = indices()
image = i*j
image = (image*65535.0/image.max()).astype(uint16)
image = 65536

print image

pilImage = Image.frombuffer('RGBA',(w,h),image)
pilImage.show('my.png')



Офлайн

#3 Янв. 13, 2011 15:13:34

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

Изображение из массива.

Цвета у вас в 16 битах как кодируются?



Офлайн

#4 Янв. 13, 2011 15:15:43

Levelup
От:
Зарегистрирован: 2011-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение из массива.

я вот это как раз и хотел узнать..



Офлайн

#5 Янв. 13, 2011 15:36:49

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

Изображение из массива.

Ну я точно не знаю в каком у вас формате изображение. Может 5-6-5
Могу предложить такой вариант, но он наверное медленный

im = Image.new('L', (w, h))
#в numbers наши цвета
for i in range(w):
for j in range(h):
r = numbers[i*w+h] & 0x1f
g = (numbers[i*w+h] >> 5) & 0x3f
b = (numbers[i*w+h] >> 11) & 0x1f
im.putpixel((i,j), int(round(0.2125*r + 0.7154*g + 0,0721*b)))



Офлайн

#6 Янв. 13, 2011 15:45:40

Levelup
От:
Зарегистрирован: 2011-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение из массива.

А как это можно определить по массиву? То есть если дан только 16 битный двумерный массив как-нибудь можно это сделать?
Большое спасибо за предложенный вариант, но он, действительно, медленный. Даже через numpy расчитывать будет медленно, поэтому думаю подгружать массив в opengl, а там уже им оперировать.



Офлайн

#7 Янв. 14, 2011 05:33:32

asv13
От:
Зарегистрирован: 2007-01-22
Сообщения: 130
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение из массива.

import numpy as np
from PIL import Image

def f(i,j):
return i**2 + j**2

w, h = 512, 512
image = np.fromfunction(f, (w, h))+10000
b1, b2 = np.min(image), np.max(image)
print 'array min max =', b1, b2
image = (image-b1)/(b2-b1)*255
print 'new min max =', np.min(image), np.max(image)
image = np.array(image, dtype=np.uint8)
pilImage = Image.frombuffer('L', (w,h), image)
pilImage.show('my.png')



Офлайн

#8 Янв. 14, 2011 14:29:59

Levelup
От:
Зарегистрирован: 2011-01-10
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение из массива.

Всем огромное спасибо за информацию. Очень помогли. Буду дальше разбираться.



Офлайн

#9 Янв. 14, 2011 17:26:42

certanista
От:
Зарегистрирован: 2010-10-28
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение из массива.

http://ru.wikipedia.org/wiki/X_Pixmap вот это можно попробовать.



Офлайн

#10 Янв. 28, 2011 10:28:37

Subideal Ox
От:
Зарегистрирован: 2010-11-23
Сообщения: 65
Репутация: +  0  -
Профиль   Отправить e-mail  

Изображение из массива.

Levelup, eсли речь идет о контурном графике, то я бы его делал средствами matplotlib, а не PIL.

Вы что-то такое имеете ввиду http://matplotlib.sourceforge.net/examples/pylab_examples/griddata_demo.html ?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version