回答編集履歴

2

デバッグの方法を追記

2020/08/10 21:34

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -99,3 +99,21 @@
99
99
  `pyimage1` は、PhotoImage オブジェクトに連番で自動的に付けられるIDで、
100
100
 
101
101
  tk.PhotoImage のfileに指定したのでは、その名前のファイルを探しに行ってます。
102
+
103
+
104
+
105
+ ----
106
+
107
+ 参考までに、デバッグ方法
108
+
109
+
110
+
111
+ cv2で読み込んだ画像の確認
112
+
113
+ cv2.imshow で画像が正常であることを確認する。
114
+
115
+
116
+
117
+ tkinter のウィジェット表示の確認
118
+
119
+ FrameやCanvasに背景色を指定して、ウィジェット自身が表示されていることを確認する。

1

質問に対する回答を追記

2020/08/10 21:34

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -37,3 +37,65 @@
37
37
  画像の中心座標で指定なので、0,0 ではなく wi2, hi2 の半分の値 が適切です。
38
38
 
39
39
  `canvas.create_image(wi2//2, hi2//2, image=img3, anchor=tk.CENTER)`
40
+
41
+
42
+
43
+
44
+
45
+ ----
46
+
47
+ > ・ImageTk.PhotoImageで読み込むと、画像がキャンバスに表示されない
48
+
49
+
50
+
51
+ 上述のレイアウト問題です。
52
+
53
+
54
+
55
+ > ・tk.PhotoImageで読み込もうとすると、既に存在するパスからでないと画像が読み込めない
56
+
57
+
58
+
59
+ fileで指定する場合はその通りです。
60
+
61
+
62
+
63
+ 他に data で読む方法もありますが、対応してない形式なので割愛して、
64
+
65
+ tk.PhotoImage では対応してないので読み込めません。
66
+
67
+
68
+
69
+ PIL(Pillow) で扱う画像を読み込むのは、ImageTk.PhotoImage を使うのが正解です。
70
+
71
+
72
+
73
+
74
+
75
+ > ・ImageTk.PhotoImageで読み込むと、引数にmaster=rootを入れられない
76
+
77
+
78
+
79
+ これは問題なく出来るはずです。
80
+
81
+
82
+
83
+ 上記のコードで `img3 = ImageTk.PhotoImage(img2, master=root)` は出来ました。
84
+
85
+
86
+
87
+ > img4 = tk.PhotoImage(file=img3, master=root)
88
+
89
+
90
+
91
+ img3 は PhotoImage オブジェクトですが、tkinter でのオブジェクトの値は
92
+
93
+ tcl/tk ライブラリとやり取りする時に文字列として評価され、
94
+
95
+ tcl/tk で管理しているリソースのIDの文字列になります。
96
+
97
+
98
+
99
+ `pyimage1` は、PhotoImage オブジェクトに連番で自動的に付けられるIDで、
100
+
101
+ tk.PhotoImage のfileに指定したのでは、その名前のファイルを探しに行ってます。