如何将一个图像的序列(原始)数据放入另一个具有不同大小的图像中?
视觉效果应该是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
答案 0 :(得分:2)
你让我们很难弄清楚你想要做什么(特别是因为你已经告诉我们你所包含的代码不起作用)。但这就是我做作物的方式:
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)
请注意,如果image1具有大小(x,y),则array1具有形状(y,x,3)。如果您需要将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)
IMAGE1
图像2
的Image3
如您所见,array2_uint和array3都正确转换为图像。您是否可以尝试解释您遇到的问题,如果输出错误,可能会更新问题中的代码以包含示例或输出错误。