2012-11-11 2 views
6

나는 이미지를 파이썬으로 표시하고 사용자가 터미널에 이미지의 이름을 입력 한 후 닫고 싶습니다. 나는 이미지를 표시 PIL을 사용, 여기에 코드입니다 :python으로 이미지를 표시하고 닫는 방법은 무엇입니까?

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

내 응용 프로그램 화면이 이미지하지만, 사용자 작업은 이미지 객체를 인식하고 터미널에 답을 작성하는 것입니다. 답변이 입력 된 경우 올바른 사용자는 다른 이미지를 받아야합니다. PIL의 문제점은 이미지를 닫을 수 없다는 것이고 연구를 통해서만 이미지 뷰어의 프로세스를 없애는 것이었지만이 방법은 실제로 신뢰할 만하고 우아하지 않습니다. .show() 및 .close()와 같은 메서드가있는 이미지를 표시하는 다른 라이브러리가 있습니까?

답변

2

이미지 뷰어/편집기를 별도의 프로세스로 열어서 사용자가 질문에 대답하면 예를 들어서 종료하십시오.

from PIL import Image 
import subprocess 

p = subprocess.Popen(["display", "/tmp/test.png"]) 
raw_input("Give a name for image:") 
p.kill() 
+2

사용자의 경로에 이미지를 표시하는 실행 파일 인 "디스플레이"에 의존합니까? 그게 조금은 ... 연약한 것 같니? – GreenAsJade

+0

예를 들어, 소프트웨어가 작동하기 위해 어떤 것을 의지해야합니다. 이것은 주어진 상황에서 가장 쉬운 방법입니다. 일반적으로 wxPython이나 PyQT와 같은 라이브러리를 사용하여 창을 만들고 이미지를 표시하는 크로스 플랫폼 앱의 경우입니다. 또한 교차 플랫폼 일 수있는 PIL의'im.show'를 사용할 수는 있지만 창을 자동으로 닫을 수는 없습니다. –

2

터미널은 선형 명령 흐름을 처리하기위한 것입니다. 즉, 질문을하고 사용자가 대답 한 다음 다른 질문을 할 수 있습니다. 여기서하려고하는 것은 단말기가 두 가지 일을하고 이미지를 보여주고 동시에 사용자에게 질문을하는 것입니다. 이 작업을 수행하려면 두 가지 두 가지 수행 할 수 있습니다

멀티

새 스레드/프로세스를 시작하고 해당 스레드를 사용 PIL 이미지를 보여줄 수 있도록, 그리고 그 사이에 첫 번째 스레드/프로세스에 요청할 수 있습니다 사용자에게 질문한다. 그런 다음 사용자가 응답하면 다른 스레드/프로세스를 닫을 수 있습니다. 어떻게 할 수 있는지 파이썬의 threading 모듈 (link)을 살펴볼 수 있습니다.

GUI

대신 단말기에서 사용자 인터페이스를 만드는, 당신은 편안 어떤 프레임 워크를 사용하여 간단한 GUI 응용 프로그램을 확인합니다. 나는 개인적으로 PyQt4을 좋아한다. Qt는 매우 강력한 GUI 개발 툴킷이며 PyQt4는이를위한 포장입니다. GUI를 만든다면, 할 일은 단지 사소한 일이다.

0

은 잔인한 수도 있지만 나를 위해 가장 쉽고 가장 강력한 솔루션은 제대로 예를 들어,이 생성 인물을 추적으로 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() 
+0

Jupyter 노트를 사용해 보았는데 이미지가 닫히지 않는 것 같습니다. 파이썬이 유휴 상태 일 때 그림이 닫히지 않았습니다. IDLE로 실행 한 후 수동으로 닫으려고하면 그냥 멈추었습니다. – Moondra

+0

우분투와 맥 오에스 모두에서 일반 파이썬 2와 3을 사용해 보았습니다. 잘 돌아갔습니다. Jupyter와 같은 프레임 워크에서는 구체적인 내용을 알지 못합니다. –

관련 문제