2016-08-07 9 views
-2

24枚の写真から2枚の写真を並べて、新しい写真を作成しようとしています。私は最終的に新しい写真のすべての可能なペアの組み合わせ(合計276)が欲しい。しかし、当面は2枚の写真を新しい写真に貼り付けるだけのプログラムを手に入れようとしていますが、エラーが発生しています。コードとエラーは次のとおりです。ここで2つの写真を1つの写真にまとめて編集する

from PIL import Image 
import os 
import itertools 

plist = os.listdir('image_resize') 
for p in plist[:]: 
    if not(p.endswith('.png')): 
     plist.remove(p) 
print(plist) 

os.chdir('C:\Python35-32\Scripts\image_resize') 

def get_pics(x,y): 
    w = os.getcwd() 
    op = plist[x] 
    op2 = plist[y] 
    pic = Image.open(os.path.join(w,op)) 
    pic2 = Image.open(os.path.join(w,op2)) 
    pic.copy() 
    pic2.copy() 
    new_image = Image.new("RGB", (1280,400)) 
    new_image.save('conjoined_pics', format='PNG') 
    pic.paste(Image.open('new_image'), (20,400,620,0)) 
    pic2.paste(Image.open('new_image'), (660,400,1260,0)) 


get_pics(0,1)  


#def get_permutations(): 
    #newlist = list(itertools.permutations(plist, 2)) 
    #print (newlist) 

エラーメッセージです:

File not found error: [Errno 2] No such file or directory: 
'os.path.join(w,op)' 
+0

こんにちは、コピー&ペーストができ、完全なトレースバックをしますエラーについてのもう少しの見通しを私たちに与えてください。 (daveydave400が述べたように、オブジェクトos.path.join(w、op)ではなく、文字列 "os.path.join(w、op)"を引用符で囲まずに書かれたように見えます) – jadsq

答えて

0

エラーメッセージが間違っている正確に何を述べ:開こうとしている画像ファイルが存在しません。私はそれが使用される前に、os.path.join(w, op)の値を印刷して意味があるかどうかを調べるでしょう。

また、インデックス値を渡したりグローバル変数を使用したり、環境を特定のディレクトリに置いたりするのではなく、2つのファイル名または2つのイメージオブジェクトを提供するように関数を変更することをお勧めします。

編集:これは具体的に画像を扱うこととは関係ありません。これはたぶんあなたが気づいていない単純なバグです。私は再びエラーメッセージを探しています

fn = os.path.join(w, op) 
print(fn, os.path.exists(fn)) 
pic = Image.open(fn) 

、あなたは、コードのあなたの"os.path.join(...)"一部の周りに引用符を入れなければなりませんように思える:あなたの関数ではこのような何かを試してみてください。あなたの質問のコードは、あなたが実行しているものとまったく同じですか?

編集:ちょうど楽しみのために編集

plist = [fn for fn in os.path.join("image_resize") if fn.endswith(".png")] 

# or better, don't require the cwd or chdir by including the path 
base_dir = "C:\Python35-32\Scripts\image_resize" 
plist = [os.path.join(base_dir, fn) for fn in os.listdir(base_dir) if fn.endswith(".png")] 

# Or even better (this gives full paths) 
from glob import glob 
base_dir = "C:\Python35-32\Scripts\image_resize" 
plist = glob(os.path.join(base_dir, "*.png")) 

# for the function 
def get_pics(fn_in1, fn_in2): 
    ... make your code work ... 

get_pics(plist[0], plist[1]) 

# Or so that you don't have to reopen the input images *every* time they are used 
def get_pics(input_image1, input_image2): 
    pass 

img1 = Image.open(plist[0]) 
img2 = Image.open(plist[1]) 
get_pics(img1, img2) 
+0

例を挙げてください?私はイメージで作業するのはかなり新しいです。ファイルが存在します。彼らはCWDに入っています。 'op'変数は、画像が存在する経路を指し、リストは画像名を経路に付けるために使用されます。なぜこれがうまくいかないのか分かりません。 – DartmouthDude82

+0

'os.path.join(w、op)' = os.path.join( 'C:\ Python35-32 \ Scripts \ image_resize'、 'bridge10_RH.png')などです。私は変数を使用してファイル内の各画像をリストする必要がないようにしています。 – DartmouthDude82

+0

自分の回答を編集します。 – daveydave400

0

を提案し、多分あなたのPythonをテストするために、あなたはGNUパラレルを使用してワンライナー内のすべての画像の並列でを行うことができますImageMagick端末のコマンドラインからこのように指定します - あなたの24個のイメージの名前が "image ????。png"であると仮定して

parallel '[ "{1}" != "{2}" ] && convert {1} {2} +append result{#}.png' ::: image* ::: image* 

あなたは、それがどのように動作するか見コマンドラインでparallel--dry-runに追加し、それがどうなるのかを紹介しますしたい場合:

... 
... 
[ "image1.png" != "image1.png" ] && convert image1.png image1.png +append result26.png 
[ "image1.png" != "image10.png" ] && convert image1.png image10.png +append result27.png 
[ "image1.png" != "image11.png" ] && convert image1.png image11.png +append result28.png 
[ "image1.png" != "image12.png" ] && convert image1.png image12.png +append result29.png 
[ "image1.png" != "image13.png" ] && convert image1.png image13.png +append result30.png 
[ "image1.png" != "image14.png" ] && convert image1.png image14.png +append result31.png 
[ "image1.png" != "image15.png" ] && convert image1.png image15.png +append result32.png 
[ "image1.png" != "image16.png" ] && convert image1.png image16.png +append result33.png 
[ "image1.png" != "image17.png" ] && convert image1.png image17.png +append result34.png 
[ "image1.png" != "image18.png" ] && convert image1.png image18.png +append result35.png 
[ "image1.png" != "image19.png" ] && convert image1.png image19.png +append result36.png 
[ "image1.png" != "image2.png" ] && convert image1.png image2.png +append result37.png 
[ "image1.png" != "image20.png" ] && convert image1.png image20.png +append result38.png 
[ "image1.png" != "image21.png" ] && convert image1.png image21.png +append result39.png 
[ "image1.png" != "image22.png" ] && convert image1.png image22.png +append result40.png 
[ "image1.png" != "image23.png" ] && convert image1.png image23.png +append result41.png 
... 
... 
関連する問題