実現したいこと
tkinterデータの画像をOpenCVデータに変更する。
前提
画像の編集に際しキャンバスへ画像を表示するため、tkinterデータを使用していますが、編集自体はopencvを使うことが多く関数を使用しデータの変換を行いたいと考えております。
発生している問題・エラーメッセージ
Exception in Tkinter callback TkCv() Pixel = list(Tk_img.get(x, y)) AttributeError: 'PhotoImage' object has no attribute 'get'
該当のソースコード
python
1 2#画像の読み込み 3#======================================== 4img2 = cv2.imread('pic/nicochan.png') 5H2, W2 = img.shape[:2] 6 7#画像の配置 8#======================================== 9rim2 = cv2.cvtColor(Img2, cv2.COLOR_BGR2RGB) 10pim2 = Image.fromarray(rim2) 11Tk_img = ImageTk.PhotoImage(pim2) 12 13cvs2 = tk.Canvas(frm, width=1007, height=1007) 14cvs2.place(x=5, y=5) 15cvs2.create_image(0, 0, image=Tk_img, anchor=tk.NW, tag="Pic_I") 16 17#画像データの変更 18#======================================== 19def TkCv():#tk>cv 20 global H2, W2 21 global Tk_img 22 bitmap = [] 23 for y in range(H2): 24 line = [] 25 for x in range(W2): 26 Pixel = list(Tk_img.get(x, y)) 27 line.append(Pixel) 28 bitmap.append(line) 29 cIm_rgb = np.array(bitmap, dtype='uint8') 30 Cv_img = cv2.cvtColor(cIm_rgb, cv2.COLOR_BAYER_BG2BGR) 31 return Cv_img 32 33 34#処理 35#==================== 36root.mainloop() 37cv2.waitKey(0) 38cv2.destroyAllWindows()
試したこと
Pixel = list(Tk_img.get(x, y))
部分でのエラーを受け、Tk_imgへglobalをつけ、また高さ、幅に関してもglobalを追加致しました。
ですがなぜget属性が機能していないのかが分かりませんでした。
補足情報(FW/ツールのバージョンなど)
python3.11.1 64-bit
回答1件