2016-12-28 72 views
0

私は、Python PILを使用してディレクトリ内の画像の一覧を表示するつもりです(つまり、次の画像ウィンドウが開く前に前の画像ウィンドウを閉じます)。ここで動作していない私のコードです。前のウィンドウを閉じることなく次々に画像を開きます。Python PILライブラリを使用して画像を1つずつ表示する

def show_images(directory): 
    for filename in os.listdir(directory): 
     path = directory + "/" + filename 
     im = Image.open(path) 
     im.show() 
     im.close() 
     time.sleep(5) 

誰でもこの手伝いできますか?私はPILライブラリの使用を主張します。 ありがとう

+0

をクリアする姿を閉じ、plot.clear()しますMatplotlib、あなたが試すことあなたがcv2.waitKey(0)を使ってイメージをsowに入れられる 'cv2'ライブラリ譲歩。 – Giridhur

+0

PILは外部ビューアプログラムを呼び出して画像を表示します。どちらがあなたのために使用していますか?おそらく 'display'か' xv'です。これらはあなたのシステムとあなたのPATHで利用可能ですか? –

+0

PILの '.show'メソッドは、開発者がコードを書いている間に画像を見ることを可能にする便利な機能であり、ユーザに画像を表示するために使用されることは意図されていません。あなたのプログラムが画像表示を制御する必要がある場合は、GUIフレームワークを使用する必要があります。これはTkinterで行うのは簡単です。 –

答えて

-2

PIL.show()は、一時ファイルに保存した後に画像を表示するための外部プログラムを呼び出し、GNOME画像ビューアやiPrintのノートブックを使用している場合はインラインmatplotlibでもかまいません。

ここでは、ドキュメントPILから収集したところから、これを行う唯一の方法はos.system()コールまたはサブプロセス呼び出しによってpkillを行うことです。

ですから、このような何かにあなたのプログラムを変更することができます:

import os 
def show_images(directory): 
for filename in os.listdir(directory): 
    path = directory + "/" + filename 
    im = Image.open(path) 
    im.show() 
    os.system('pkill eog') #if you use GNOME Viewer 
    im.close() 
    time.sleep(5) 

あなたが独占的にPILを使用する必要がない場合は、あなたが説明するように、表示のためにこのようなmatplotlibのようなその他のライブラリに切り替えてみてくださいすることができますここで()などplot.closeなどの単純な呼び出しはライブラリがあなたのための問題ではない場合の図に

import matplotlib.pyplot as plt 

def show_images(directory): 
for filename in os.listdir(directory): 
    path = directory + "/" + filename 
    im = Image.open(path) 
    plt.imshow(im) 
    plt.show() 
    plt.clf() #will make the plot window empty 
    im.close() 
    time.sleep(5) 
+0

これは動作していないようで、前の画像ウィンドウを消さずに新しい画像ウィンドウを開始するだけです。 –

+0

matplotlibを使ってイメージを表示できますか?これで新しいスニペットを編集して追加します。 – Giridhur

関連する問題