2012-02-25 11 views
0

画像のシーケンス(生の)データを異なるサイズの別の画像に挿入するにはどうすればいいですか?予想 視覚効果は、crop方法の一つのようにそのデータが予期されるように異なる結果を与える変換の2つの変種以下のように生データシーケンスから画像にデータを入れる方法

... 
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) 
... 

来なくすべき

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

"予想通りではない" - 結果が期待どおりではないことを説明できる場合に役立ちます。 – YXD

+0

私は、元の画像から切り取った新しい画像を見たいと思います。バリアントAでは、画像の一部が白い縞模様と結合された2つの(等しくない)部分に分割されていることがわかります。バリアントBでは、コンテンツは認識できません – cur4so

答えて

2

あなたはそれを非常に作っ私たちがあなたがやろうとしていることを理解するのは難しいです(特に、あなたがすでに含まれているコードがうまくいかないとあなたに言ったからです)。配列1の形状(Y、X、3)画像1のサイズ(x、y)を持っている場合があることを

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) 

はご注意:しかし、これは、私は作物を行うだろう方法です。あなたのコードでも

image2.fromstring(array2.tostring()) 

sequenceはすでに「シーケンス」である(または、あなたが技術的になりたい場合は、それは反復可能です):既存のイメージに配列2から値を配置する必要がある場合、私は最も簡単な方法があると信じて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) 

MAGE1

image1

Image2の

image2

画像3あなたは、両方のarray2_uintを見ることができ、正しく画像に変換ますARRAY3として

image3

。あなたが試して問題を説明することができますか、多分あなたの質問のコードを誤った出力を得る場合は、例や間違った出力を含めるように更新してください。

+0

バゴ、あなたの返事に感謝します。問題は入力時のリストではなく、出力上のリストにあります。経験的には、変換がAまたはBを指し示した後に画像データを保存する方法を見つけました。array2 = transform(array1)とimage2 = Image.fromarray(array2)を得ることができますか?残念ながら、サイズが同じに保たれている「ドライラン」の場合でも、それは通過しません。たとえば、data = numpy.fft.fftn(array1、s = None、axes = None)、array2 = numpy.fft.ifftn(data、s = None、axes = None)の変換を行い、array2を返すと、画像、バリアントA、B do – cur4so

+0

軸の順列b/w画像とデータの配列にも問題がある可能性があります – cur4so

+0

私は画像の内容を変換しようとしています。上記のような簡単な例です: 'data = numpy.fft.fftn(array1、s = None、axes = None)array2 = numpy.fft.ifftn(data、s = None、axes = None)'一般にこの場合、入力!=出力ですが、何とかして 'シーンの裏にある魔法'は、配列をリストに変換して 'image 'を使うと、入力画像=出力画像になります。putdata(my_list) 'サイズを同じにしておけば(!)、あなたの助言に従って配列を返し、' image = Image.fromarray(array2) 'のように画像に保存しようとすると、画像は元のように見えません。 – cur4so

関連する問題