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

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

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

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

Python

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

Q&A

解決済

4回答

34696閲覧

ファルダ内の画像を読み込むときNoneが返ってくる問題について

trafalbad

総合スコア303

OpenCV

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

Python

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

0グッド

0クリップ

投稿2017/06/14 00:26

編集2017/06/14 01:16

opencvでファルダ内の画像を読み込もうとしたら、Noneが返ってくるのですが、なぜなのでしょうか?

ちなみに、ファルダのパスは間違っていません。

for i in os.listdir("パス"): img = cv2.imread(i) print(img) None None None None None None None None None None

ネット上はみなさんこの方法でやっているのですが、このサイト

Warning 画像のファイルのパスが間違っていてもエラーとならない!そこで、 print(img) を実行すると None と表示される (よくありがちなバグなので注意しよう)

と言及がありましたが、解決策がわかりません。
よろしくお願いします。

#追記

以下のコードでファイル名を表示させましたが、ちゃんとjpgファイルが入っていますし、パスも間違っていませんでした。
imreadで読み込むとNoneが返ってくるようです。
ちなみに動作環境はanaconda上で、フォルダはデスクトップ上にあります。

os.path.exists("パス") >>>True for i in os.listdir("パス"): print(i) >>>.DS_Store 00asfs1.jpg 01-gaifakan.jpg 01-gaikaadgn.jpg 01-gaikan.jpg 01.jpg 01asdf.jpg 01fag-gaikan.jpg 01fas.jpg 01fasfa.jpg 01fdafa.jpg 01gag.jpg 0520170300802.jpg 0520170301302.jpg 0520170301902.jpg 0520170500302.jpg 0520170501802.jpg 0902千駄ヶ谷_外観車無し1-425x600.jpg 0920170202102.jpg 0920170210902.jpg 09f85cca23614e501b992c1eea897744.jpg 0asfas1.jpg

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

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

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

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

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

guest

回答4

0

globでフルパス指定で列挙したほうが楽かもしれません。

Anaconda(jupyter-notebook)上での実行例

Python

1import glob 2import cv2 3files = glob.glob(r"c:\users\hoge\desktop\images\*.jpg") # .jpgのみ列挙 4for f in files: 5 print(f) 6 img = cv2.imread(f) 7 print(img) 8 9""" 10c:\users\hoge\desktop\images\test1.jpg 11[[[255 255 255] 12 : 13c:\users\hoge\desktop\images\test2.jpg 14[[[255 255 255] 15 : 16"""

投稿2017/06/14 04:17

can110

総合スコア38260

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

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

trafalbad

2017/06/15 02:51

参考になりました。ありがとうございます
guest

0

ベストアンサー

python

1for p in os.listdir(path): 2 print(p)

の場合、カレントディレクトリのpを読み込もうとしているためNoneを返しています。

python

1path = './hoge/' 2for p in os.listdir(path): 3 img = cv2.imread(''.join([path,p])) 4 print(img)

のように、cv2.imread()にファイルのパスをフルパスか相対パスで渡してください。

投稿2017/06/14 03:04

編集2017/06/14 03:11
rege

総合スコア38

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

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

trafalbad

2017/06/14 04:16 編集

ファルダ自身のパスを読み込んでおり、画像のパスを読み込んでいなかったのが理由でした。 path=ファルダパス for i in os.listdir(path): print(cv2.imread(path+'/'+i)) で解決しました
guest

0

経験上、NULL が帰ってくるのは

  • ファイルのパスが間違っていて読み込めなかった。
  • パーミッションのエラーでファイルが読み込めなかった。
  • 読み込んだファイルが 画像ファイルではなかった。(ファイルが壊れている or 対応していない画像フォーマット。)
  • 画像ライブラリがみつからなかったので、画像ファイルの判別に失敗した。

ぐらいではないかと思います。

まずは、プログラムに

python

1print "ファイルは"+str(i)

のような変数の中身を表示させる行を入れて実行して、表示されたパスにファイルがあるかパーミッションやフォーマットが正しいかを確認してください。

投稿2017/06/14 00:44

CHERRY

総合スコア25171

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

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

trafalbad

2017/06/14 00:57

ファルダ内のファイルはありますし、パスも間違っていませでした。imreadで読み込むとNoneが返ってくるようです。詳しくは追記しました。よろしくおねがいします。
trafalbad

2017/06/14 01:14

動作環境がanaconda上だからでしょうか?フォルダはデスクトップ上にあります。
guest

0

print i
とか
print type(i)
してみては?

あとcv2.imread always returns NoneTypeみたいなのを確認してみるとか

投稿2017/06/14 00:33

編集2017/06/14 00:36
dojikko

総合スコア3939

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

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

trafalbad

2017/06/14 00:57

ファルダ内のファイルはありますし、パスも間違っていませでした。imreadで読み込むとNoneが返ってくるようです。詳しくは追記しました。よろしくおねがいします。
trafalbad

2017/06/14 01:15

動作環境がanaconda上だからでしょうか?フォルダはデスクトップ上にあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問