質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1838閲覧

pythonのtkinterを使用して画像の絶対値パスを取得し、その絶対値パスを使用してopenCVにて画像を表示させたい(VSCode使用)。

kurokaba

総合スコア6

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/02/09 17:27

##前提・実現したいこと
pythonのtkinterを使用して画像の絶対値パスを取得し、その絶対値パスを使用してopenCVにて画像を表示させたい。
##発生している問題・エラーメッセージ
Exception in Tkinter callback
Traceback (most recent call last):
File "/Users/name/opt/anaconda3/lib/python3.7/tkinter/init.py", line 1705, in call
return self.func(*args)
File "/Users/name/pyworks/test.py", line 12, in btn_click
plt.imshow(img,cmap="gray")
File "/Users/name/opt/anaconda3/lib/python3.7/site-packages/matplotlib/pyplot.py", line 2730, in imshow
**kwargs)
File "/Users/name/opt/anaconda3/lib/python3.7/site-packages/matplotlib/init.py", line 1438, in inner
return func(ax, *map(sanitize_sequence, args), **kwargs)
File "/Users/name/opt/anaconda3/lib/python3.7/site-packages/matplotlib/axes/_axes.py", line 5523, in imshow
im.set_data(X)
File "/Users/name/opt/anaconda3/lib/python3.7/site-packages/matplotlib/image.py", line 701, in set_data
"float".format(self._A.dtype))
TypeError: Image data of dtype object cannot be converted to float

##自分で調べたことや試したこと
tkinterで取得した絶対パスではなく、自分で入力したパス(ct = cv2.imread('/Users/name/pyworks/test.png',cv2.IMREAD_UNCHANGED)ではエラーメッセージは出ないが、画像が表示されない。

##使っているツールのバージョンなど補足情報
Mac_OS_10.15.7、python3.7.9、VSCode1.53.0使用

##該当のソースコード

python

1import os,sys 2import cv2 3import matplotlib.pyplot as plt 4from tkinter import * 5from tkinter import ttk 6from tkinter import filedialog 7 8def btn_click(): 9 imgpath = filename.get() 10 img = cv2.imread('imgpath',cv2.IMREAD_UNCHANGED) 11 plt.subplot(1,1,1) 12 plt.imshow(img,cmap="gray") 13 cv2.waitKey(0) 14 cv2.destroyAllWindows() 15 16def dirdialog_clicked(): 17 idir = os.path.abspath(os.path.dirname(__file__)) 18 filepath = filedialog.askopenfilename(initialdir = idir) 19 filename.set(filepath) 20 21root = Tk() 22root.title("サンプル") 23 24frame1 = ttk.Frame(root, padding=10) 25frame1.grid(row=0, column=1, sticky=E) 26 27IDirLabel = ttk.Label(frame1, text="ファイル参照>>", padding=(5, 2)) 28IDirLabel.pack(side=LEFT) 29 30 # [ファイル参照」エントリーの作成 31filename = StringVar() 32IDirEntry = ttk.Entry(frame1, textvariable=filename, width=30) 33IDirEntry.pack(side=LEFT) 34 35# 「ファイル参照」ボタンの作成 36IDirButton = ttk.Button(frame1, text="参照", command=dirdialog_clicked) 37IDirButton.pack(side=LEFT) 38 39frame2 = ttk.Frame(root, padding=10) 40frame2.grid(row=5,column=1,sticky=W) 41 42# 実行ボタンの設置 43button1 = ttk.Button(frame2, text="実行", command=btn_click) 44button1.pack(fill = "x", padx=30, side = "left") 45 46# キャンセルボタンの設置 47button2 = ttk.Button(frame2, text=("閉じる"), command=quit) 48button2.pack(fill = "x", padx=30, side = "left") 49 50root.mainloop() 51

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ドキュメントによるとcv2.imreadの第一引数にはファイルのパスを入れる必要があります。

あと表示する処理が不完全のようです。

表示されるだけのサンプルコードを書いてみました。
btn_clickメソッドを以下のようの書き換えると画像が表示されると思います。
必要に応じて変えてください。

matplotlibを使って表示する場合

python

1def btn_click(): 2 imgpath = filename.get() 3 img = cv2.imread(imgpath, cv2.IMREAD_UNCHANGED) 4 plt.subplot(1, 1, 1) 5 plt.imshow(img, cmap="gray") 6 plt.show()

OpenCVを使って表示する場合

python

1def btn_click(): 2 imgpath = filename.get() 3 img = cv2.imread(imgpath, cv2.IMREAD_UNCHANGED) 4 cv2.imshow('title', img) 5 cv2.waitKey(0) 6 cv2.destroyAllWindows()

投稿2021/02/09 20:13

errormaker74

総合スコア230

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurokaba

2021/02/09 21:37

早急なご回答ありがとうございます。 非常に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問