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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

435閲覧

python openCV

matrix99999

総合スコア15

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/05/25 03:54

編集2019/05/25 07:11

python openCVを利用して文字認証を考えています。
ちなみに作成初挑戦です。
今までは座学にて勉強していました。

フローですが、
1.フォルダの中の画像ファイル名を全て取得する。
2.1で取得したファイル名をインデックスに、1枚ずつ画像をfor文(while文)で読み込む。

まで完成させようと思います。

1に関しては何とかクリアできました。
2は、for文を用いてイメージを読み込みました。
本当に読み込んだかどうか、確認したいと思います。
コードは、
cv2.imshow("?????", img)
と考えていますが、"?????"がどう記載すべきかわかりません。
ご教示いただければと思います。

コード

import

1import cv2 2import os 3path = "./data/" 4files = os.listdir(path) 5files_file = [f for f in files if os.path.isfile(os.path.join(path, f))] 6 7for item in files_file: 8 img = cv2.imread(item) 9cv2.imshow("?????", img)

編集:

html

1import numpy as np 2import cv2 3import os 4%matplotlib inline 5path = "./data/" 6files = os.listdir(path) 7files_file = [f for f in files if os.path.isfile(os.path.join(path, f))] 8 9 10for item in files_file: 11 img = cv2.imread(os.path.join(path, item)) 12 cv2.imshow(item, img) 13 cv2.waitKey(0) 14 cv2.destroyAllWindows()

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

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

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

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

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

guest

回答1

0

ベストアンサー

imshowの第一引数は表示するウインドウ名なので、何を指定してもよいです。が、分かりやすさからファイル名を指定するのがよいでしょう。

ほか、提示コードで気になる点をあげましたので以下のようにコード修正ください。

  • cv2.imread(item)だとカレントディレクトリからファイルを探そうとするので読込に失敗しますのでcv2.imread(os.path.join(path, item))とパス指定します。
  • cv2.imshow()のインデントがおかしいです。そのままだと最後の一画像しか表示されません。
  • cv2.waitKey(0)~cv2.destroyAllWindows()を入れないと画像が正しく表示されません。

Python

1for item in files_file: 2 img = cv2.imread(os.path.join(path, item)) 3 cv2.imshow(item, img) 4 cv2.waitKey(0) 5 cv2.destroyAllWindows()

投稿2019/05/25 04:20

can110

総合スコア38266

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

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

matrix99999

2019/05/25 06:43 編集

下記のようにコードを作成して実行しました。 import numpy as np import cv2 import os %matplotlib inline path = "./data/" files = os.listdir(path) files_file = [f for f in files if os.path.isfile(os.path.join(path, f))] for item in files_file: img = cv2.imread(os.path.join(path, item)) cv2.imshow(item, img) cv2.waitKey(0) cv2.destroyAllWindows() 応答がなかったので読み込んだ配列情報がでるか下記コードで試しました。 import numpy as np import cv2 import os %matplotlib inline path = "./data/" files = os.listdir(path) files_file = [f for f in files if os.path.isfile(os.path.join(path, f))] print(files_file) これは、問題なく情報が表示されました。 よろしければご教示お願いします。
can110

2019/05/25 06:44

Jupyterのホームディレクトリ直下に「data」フォルダが存在しないのではないでしょうか。 print(os.path.isdir(path))で確認してみてください。
matrix99999

2019/05/25 07:04 編集

ありがとうございます。 print(os.path.isdir(path)) で確認したところ応答なしでした。 再度、 print(files_file) で確認しましたが応答なしになりました。 anacondaは今朝、再インストールしました。 jupyter_notebook_config.pyの設定を c.NotebookApp.notebook_dir ='D:\PYTHON' ようにしてカレントにならなかったので、 jupyter notebookのショートカットの設定 Jupyter Notebookショートカットのリンク先から末尾の%USERPROFILE%を削除することで正常に動作するようになりました。
can110

2019/05/25 07:02

あ、その前にprint(files_file)でファイル名は表示されていたのですね。見落としてました。 ではfor item in files_file:以下に続く4行はちゃんとインデントされていますか? このコメント欄ではインデント消えてしまうので、現状のコードを質問に追記していただくのが確実です。
matrix99999

2019/05/25 07:08

ありがとうございます。 ご回答と編集が交差しました。 anacondaは今朝、再インストールしました。 jupyter_notebook_config.pyの設定を c.NotebookApp.notebook_dir ='D:\PYTHON' ようにしてカレントにならなかったので、 jupyter notebookのショートカットの設定 Jupyter Notebookショートカットのリンク先から末尾の%USERPROFILE%を削除することで正常に動作するようになりました。 print(os.path.isdir(path)) で確認したところ応答なしでした。 再度、 print(files_file) で確認しましたが応答なしになりました。
matrix99999

2019/05/25 07:11

コードを再度記載し搭載しました。 ご教示お願いいただければと思います。
can110

2019/05/25 07:18

ソースコードをそのままコピペしpathだけこちらの環境に合わせ修正しJupyter上で実行しましたが、 正常に画像ウインドウが表示され、応答なしにもならずウインドウを閉じることもできました。 コードには問題ないと思います。 ちなみに「応答なしになる」時点では画像ウインドウは表示されているでしょうか?
matrix99999

2019/05/25 07:27

ありがとうございます。 画像はwindowは表示されません。 実行するとカーネルが落ちてしまう感じです。 再起動してfile一覧が見えるようになりましたので。
can110

2019/05/25 07:37

ちょっと不可解な現象ですね。画像の枚数がものすごく多いということもないですよね? あとは - Kernel -> Restart してみる - 新規にnotebookを作り直してみる - シンプルにカレントディレクトリの指定の1枚だけ画像を表示するコードで試してみる - Jupyter上ではなく、test.pyなりを作りコマンドプロンプト上から実行してみる あたりで解消しなければ、cv2の画像表示回りの問題かもしれないので別途質問を立てられた方がよいと思います。
matrix99999

2019/05/25 07:48

ありがとうございます。 ご指摘の「画像の枚数がものすごく多い」と思います。 ちなみに2100個のデータです。 これが原因でしょうか。
can110

2019/05/25 07:58

数個に減らしてみて試しに実行してみてください。 正常に動作すればそれが要因だと思われます。が、根本的な原因は私にも分かりません(メモリ不足?)
matrix99999

2019/05/25 08:03

ありがとうございます。 1枚にしても動作しませんでした。 言われるように別の問題かもしれません。 メモリは十分搭載しています。 休日お手を煩わせ申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問