강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

김효성님의 프로필 이미지
김효성

작성한 질문수

tkinter label에 이미지가 나오지 않습니다

작성

·

911

0

파이썬으로 이미지 처리 프로그램을 만드는 중인데, 아래 함수를 만들어서 사용하고 있었습니다.

def Func1():
box = (cap.winfo_x() + 10, cap.winfo_y() + 30, cap.winfo_width(), cap.winfo_height())
scr = pyautogui.screenshot("img.png", region=box)

Func2()

img = PhotoImage(file="Result.png")
plabel.configure(image=img)

root.after(20, Recognize)
def Func2():
img = cv2.imread("img.png", cv2.COLOR_BGR2RGB)

생략

cv2.imwrite("Result.png", img)

Func1에서 pyautogui로 img.png파일을 생성해서 Func2에서 cv2.imread를 통해 이미지를 불러와서 처리하는 방식이었고 잘 작동하는것을 확인했습니다. (중간과정은 길어서 생략했습니다)

저는 이 함수를 이미지 파일을 저장 후 불러오는 방식에서 이미지를 파일로 저장하지 않고 바로 cv2로 처리하는 방식을 새로 구현하고자 아래와 같이 수정하였습니다. 그러자 plabel에 이미지가 더이상 출력되지 않았습니다.

def Func1():
box = (cap.winfo_x() + 10, cap.winfo_y() + 30, cap.winfo_width(), cap.winfo_height())
scr = pyautogui.screenshot(region=box)

Func2(scr)

img = PhotoImage(file="Result.png")
plabel.configure(image=img)

root.after(20, Recognize)
def Func2(scr):
img = cv2.cvtColor(np.array(scr), cv2.COLOR_BGR2RGB)

생략

cv2.imwrite("Result.png", img)

 
 

실행해본 결과 위 함수는 라벨에 이미지가 출력되지 않는 문제를 제외하면 이전과 똑같이 작동하는 것을 확인했습니다.

실제로 탐색기에서 Result.png 파일을 열어보면 이미지가 정상적으로 처리되는 것 또한 확인할 수 있었습니다.

라벨을 초기화할 때 이미지를 넣으면 처음 실행 시 이미지가 잘 나오지만 Func1을 작동시키면 다시 아무런 이미지도 표시되지 않습니다.

 

이것저것 시도해 본 결과 이미지가 나오긴 했지만 도저히 이해가 가지 않아서 질문합니다.

제가 고친 방법은 다음과 같습니다.

scr = pyautogui.screenshot(region=box)

이 함수 대신

scr = pyautogui.screenshot("img.png", region=box)

이 함수를 사용하면 라벨에 이미지가 정상적으로 출력됩니다.

그런데 수정된 함수에서는 img.png 파일을 더 이상 사용하지 않기때문에 저 파일은 이미지를 처리하는데 있어 아무런 관련없는 파일입니다.

도대체 저 함수가 tkinter 라벨과 무슨 관련이 있길래 스크린샷을 파일로 저장해야만 라벨에 이미지가 출력되는건지 궁금합니다.

답변

답변을 기다리고 있는 질문이에요
첫번째 답변을 남겨보세요!
김효성님의 프로필 이미지
김효성

작성한 질문수

질문하기