작성
·
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 라벨과 무슨 관련이 있길래 스크린샷을 파일로 저장해야만 라벨에 이미지가 출력되는건지 궁금합니다.
답변