9

Pythonで画像を表示し、ユーザーがターミナルに画像の名前を入力してから閉じたいと思います。PILを使用して画像を表示します。コードは次のとおりです。

im = Image.open("image.jpg")
im.show()

私のアプリケーションはこの画像を表示しますが、ユーザーのタスクは画像上のオブジェクトを認識し、端末に回答を書き込むことです。入力された答えが正しければ、ユーザーは別の画像を取得する必要があります。PILの問題は、画像を閉じることができないことです。調査では、画像ビューアのプロセスを強制終了するしか解決策はありませんでしたが、これは信頼性が高くエレガントではありません。.show()や.close()のようなメソッドを持つ画像を表示するための他のライブラリはありますか?

4

5 に答える 5

4

パーティーに少し遅れましたが、(画像を表示するためにGUIプログラミングを学ぶのに本当に悩むことができない不満を持ったデータサイエンティストとして)私はおそらく、より簡単な解決策を見たいと思っている他の何人かの人々のために話すことができますこれ。Anuragのソリューションを拡張することで、少し回避策を見つけました。

2番目のPythonスクリプトを作成します(これを「imviewer.py」と呼びましょう)。

from skimage.viewer import ImageViewer
from skimage.io import imread

img = imread('image.png') #path to IMG
view = ImageViewer(img)
view.show()

次に、メインスクリプトで、Anuragが提案したように実行します。

import subprocess
p = subprocess.Popen('python imviewer.py')
#your code
p.kill()

メインスクリプトに、開きたい画像を「imviewer.py」で一時的に保存させてから、次の画像などで上書きすることができます。

これがこの問題の誰かに役立つことを願っています!

于 2018-10-08T03:06:24.773 に答える
3

別のプロセスで画像ビューア/エディタを開き、ユーザーが質問に答えたらそれを強制終了します。

from PIL import Image
import subprocess

p = subprocess.Popen(["display", "/tmp/test.png"])
raw_input("Give a name for image:")
p.kill()
于 2012-11-11T02:33:57.733 に答える
2

ターミナルは、線形コマンドフローを処理することを目的としています。つまり、質問をし、ユーザーが回答し、別の質問をすることができます。ここでやろうとしているのは、端末が2つのことを行うことです。画像を表示すると同時に、ユーザーに質問します。これを行うには、次の2つのことを行うことができます。

マルチプロセッシング

新しいスレッド/プロセスを開始し、そのスレッドを使用してPILに画像を表示させることができます。その間、最初のスレッド/プロセスでユーザーに質問します。次に、ユーザーが応答した後、他のスレッド/プロセスを閉じることができます。これを行う方法の詳細については、Pythonのthreadingモジュール(リンク)を参照してください。

GUI

ターミナルでユーザーインターフェイスを作成する代わりに、使いやすいフレームワークを使用してシンプルなGUIアプリケーションを作成します。私は個人的にPyQt4が好きです。Qtは非常に強力なGUI開発ツールキットであり、PyQt4はそのラッパーです。GUIを作成する場合、あなたがやろうとしていることはかなり些細なことです。

于 2012-11-11T02:05:36.947 に答える
2

すべてのGUIが使いにくいわけではありません。

これは、PySimpleGUIを使用した単一行のソリューションです。通常は1行で書くことはありませんが、1回限りなので、追加する必要がないので、追加してもかまいません。

import PySimpleGUI as sg

sg.Window('My window').Layout([[ sg.Image('PySimpleGUI.png') ]]).Read()

ここに画像の説明を入力してください

于 2018-10-09T12:22:54.240 に答える
1

やり過ぎかもしれませんが、私にとって最も簡単で堅牢な解決策は、matplotlibを使用することでした。これは、matplotlibが作成する図を適切に追跡するためです。

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

imgplot = plt.imshow(mpimg.imread('animal.png'))
plt.ion()
plt.show()
animal_name = raw_input("What is the name?: ")
plt.close()
于 2017-03-09T22:00:02.353 に答える