tkinterで作成したキャンバス上に、リサイズした画像を表示したい
tkinterでGUIを作成しています。
cv2で読み込んだ画像をリサイズして、tkinterで作成したキャンバス上に表示したいのですが、うまくいきません。
詳細は以下です。
お詳しい方、ご回答よろしくお願いします。
発生している問題
下のコードを実行すると、画像が表示されていない空の画面が出てきます。
エラーメッセージは出ていません。
現在直面している問題は、以下です。
・ImageTk.PhotoImageで読み込むと、画像がキャンバスに表示されない
・tk.PhotoImageで読み込もうとすると、既に存在するパスからでないと画像が読み込めない
・ImageTk.PhotoImageで読み込むと、引数にmaster=rootを入れられない
該当のソースコード
python
1import tkinter as tk 2import cv2 3from PIL import Image, ImageTk 4 5root=tk.Tk() 6root.title("gazou") 7 8img = cv2.imread(r"C:\~~~\sample.png") 9hi = img.shape[0] 10wi = img.shape[1] 11 12#画像をリサイズ 13wi2 = wi*(3/4) 14hi2 = hi*(3/4) 15img2 = cv2.resize(img, (int(wi2), int(hi2))) 16 17#tkinterで扱える形式に画像を変換 18img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB) 19img2 = Image.fromarray(img2) 20img3 = ImageTk.PhotoImage(img2) 21 22#フレーム 23fra = tk.Frame() 24fra.pack() 25 26#キャンバス 27root.minsize(int(wi2), 600) 28canvas = tk.Canvas(fra, bg="gray94", width=int(wi2), height=600) 29canvas.place(x=0, y=0) 30canvas.create_image(0, 0, image=img3, anchor=tk.CENTER) 31 32root.mainloop()
試したこと
①img3 = ImageTk.PhotoImage(img2)
の後ろに下記の一行を追加したところ、このようなエラーが出ました。正しい書き方ではないようです。
python
1>>> img4 = tk.PhotoImage(file=img3, master=root) 2Traceback (most recent call last): 3 File "<stdin>", line 1, in <module> 4 File "C:\Users\a284b\anaconda3\envs\Orochi\lib\tkinter\__init__.py", line 4061, in __init__ 5 Image.__init__(self, 'photo', name, cnf, master, **kw) 6 File "C:\Users\a284b\anaconda3\envs\Orochi\lib\tkinter\__init__.py", line 4006, in __init__ 7 self.tk.call(('image', 'create', imgtype, name,) + options) 8_tkinter.TclError: couldn't open "pyimage1": no such file or directory
補足情報(FW/ツールのバージョンなど)
Windows10
Python 3.8.3
opencv 4.4.0
pillow 7.2.0
tk 8.6.10
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/11 05:04