как поместить данные в изображение из последовательности - PullRequest
0 голосов
/ 25 февраля 2012

Как поместить последовательность (необработанные) данные одного изображения в другое, которое имеет другой размер?Предполагается, что визуальный эффект будет одним из методов crop, но данные должны поступать как необработанные данные

...
sequence = image1.getdata()
size=(int(image1.size[0]/2),int(image1.size[1]/2))
image2 = Image.new(image1.mode, size, "black")
seq_in=[]
for i in xrange(len(sequence)):
      seq_in.append(sequence[i])
seq_out=transform_data(seq_in,size,image1.size)
image2.putdata(seq_out)
...

. Следующие 2 варианта преобразования дают разные результаты, но не так, как ожидалось бы

transform_data(seq_in,size,size_in):

#seq_t=do_something_with_the_data(seq_in)
seq_t=seq_in

seq_out=[]
#A:
sz=size[0]*size[1]
for i in xrange(sz):
      seq_out.append((seq_t[i]))
# end A
#B:
seq_r = numpy.array(seq_t).reshape(size_in[0],size_in[1],3)

for i in xrange(size[0]):
   for j in xrange(size[1]):
      seq_out.append((seq_r[i][j][0], seq_r[i][j][1], seq_r[i][j][2]))
#end B

return seq_out

1 Ответ

2 голосов
/ 25 февраля 2012

Вы очень усложнили нам понимание того, что вы пытаетесь сделать (особенно потому, что вы уже сказали нам, что код, который вы включили, не работает). Но вот как я бы сделал урожай:

from PIL import Image
import numpy as np

size = image1.size
size = [i//2 for i in size]
array1 = np.asarray(image1)
array2 = array1[:size[1], :size[0]]
image2 = Image.fromarray(array2)

Обратите внимание, что array1 имеет форму (y, x, 3), если image1 имеет размер (x, y). Если вам нужно поместить значения из array2 в существующее изображение, я считаю, что самый простой способ:

image2.fromstring(array2.tostring())

Также в вашем коде sequence уже является «последовательностью» (или итеративной, если вы хотите быть техническим), поэтому вам не нужно создавать seq_in, но если вы действительно хотите иметь последовательность в виде списка Вы можете сделать seq_in = list(sequence)

Я все еще не совсем понимаю проблему, с которой вы столкнулись, но, возможно, этот пример поможет разобраться:

image1 = Image.open("img1.jpg")
array1 = np.asarray(image1)
array2 = np.fft.fftn(array1)
array2_uint = (np.log(np.abs(array2)) * 14).astype('uint8')
image2 = Image.fromarray(array2_uint)
array3 = np.fft.ifftn(array2).astype('uint8')
image3 = Image.fromarray(array3)

Изображение1

image1

Image2

image2

Image3

image3

Как вы видите, и array2_uint, и array3 правильно конвертируются в изображения. Можете ли вы попытаться объяснить возникшую проблему, возможно, обновите код в своем вопросе, включив в него пример или неправильный вывод, если вы получаете неправильный вывод.

...