回答編集履歴
2
デバッグの方法を追記
    
        answer	
    CHANGED
    
    | @@ -48,4 +48,13 @@ | |
| 48 48 | 
             
            tcl/tk で管理しているリソースのIDの文字列になります。
         | 
| 49 49 |  | 
| 50 50 | 
             
            `pyimage1` は、PhotoImage オブジェクトに連番で自動的に付けられるIDで、
         | 
| 51 | 
            -
            tk.PhotoImage のfileに指定したのでは、その名前のファイルを探しに行ってます。
         | 
| 51 | 
            +
            tk.PhotoImage のfileに指定したのでは、その名前のファイルを探しに行ってます。
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            ----
         | 
| 54 | 
            +
            参考までに、デバッグ方法
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            cv2で読み込んだ画像の確認
         | 
| 57 | 
            +
            cv2.imshow で画像が正常であることを確認する。
         | 
| 58 | 
            +
             | 
| 59 | 
            +
            tkinter のウィジェット表示の確認
         | 
| 60 | 
            +
            FrameやCanvasに背景色を指定して、ウィジェット自身が表示されていることを確認する。
         | 
1
質問に対する回答を追記
    
        answer	
    CHANGED
    
    | @@ -17,4 +17,35 @@ | |
| 17 17 |  | 
| 18 18 | 
             
            また、create_imageで指定する座標は、左上の座標ではなく
         | 
| 19 19 | 
             
            画像の中心座標で指定なので、0,0 ではなく wi2, hi2 の半分の値 が適切です。
         | 
| 20 | 
            -
            `canvas.create_image(wi2//2, hi2//2, image=img3, anchor=tk.CENTER)`
         | 
| 20 | 
            +
            `canvas.create_image(wi2//2, hi2//2, image=img3, anchor=tk.CENTER)`
         | 
| 21 | 
            +
             | 
| 22 | 
            +
             | 
| 23 | 
            +
            ----
         | 
| 24 | 
            +
            > ・ImageTk.PhotoImageで読み込むと、画像がキャンバスに表示されない
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            上述のレイアウト問題です。
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            > ・tk.PhotoImageで読み込もうとすると、既に存在するパスからでないと画像が読み込めない
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            fileで指定する場合はその通りです。
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            他に data で読む方法もありますが、対応してない形式なので割愛して、
         | 
| 33 | 
            +
            tk.PhotoImage では対応してないので読み込めません。
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            PIL(Pillow) で扱う画像を読み込むのは、ImageTk.PhotoImage を使うのが正解です。
         | 
| 36 | 
            +
             | 
| 37 | 
            +
             | 
| 38 | 
            +
            > ・ImageTk.PhotoImageで読み込むと、引数にmaster=rootを入れられない
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            これは問題なく出来るはずです。
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            上記のコードで `img3 = ImageTk.PhotoImage(img2, master=root)` は出来ました。
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            > img4 = tk.PhotoImage(file=img3, master=root)
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            img3 は PhotoImage オブジェクトですが、tkinter でのオブジェクトの値は
         | 
| 47 | 
            +
            tcl/tk ライブラリとやり取りする時に文字列として評価され、
         | 
| 48 | 
            +
            tcl/tk で管理しているリソースのIDの文字列になります。
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            `pyimage1` は、PhotoImage オブジェクトに連番で自動的に付けられるIDで、
         | 
| 51 | 
            +
            tk.PhotoImage のfileに指定したのでは、その名前のファイルを探しに行ってます。
         | 
