pathは読み込みたい画像のファイルパスがstrで入っているリストです。
python
1print(path[0]) 2print(len(path))
とすると、
TrainVal/VOCdevkit/VOC2011/JPEGImages/2007_001586.jpg
2223
と表示されます。ここで、
python
1 2img_sequence = [] 3 4for image in path: 5 img = Image.open(path) 6 img_sequence.append(img)
とすると、次のようなエラーがでます。
OSError: [Errno 24] Too many open files: 'TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001278.jpg'
そこで、ためしに、
python
1 2img_sequence = [] 3 4i = 0 5for image in path: 6 img = Image.open(path) 7 img_sequence.append(img) 8 print(i) 9 i = i + 1
とすると1020と表示された直後に、やはり
OSError: [Errno 24] Too many open files: 'TrainVal/VOCdevkit/VOC2011/JPEGImages/2009_001278.jpg'
というエラーが出ます。エラーの原因は何でしょうか。また、どうしたら解決できるでしょうか。
ちなみに
python
1 2img_sequence = [] 3 4i = 0 5for i in range(1020): 6 img = Image.open(path[i]) 7 img_sequence.append(img) 8 i = i + 1
とすればエラーは出ませんが、2223ファイルすべてをつなげた配列を作りたいのです。
追記
ここを参考に次のようにプログラムを変更させるとうまく行きました。(もっとスマートに書く方法があったら教えてください)
python
1 2img_sequence = [] 3 4for image in path: 5 fp = open(image,"rb") 6 img = Image.open(path) 7 img_sequence.append(img) 8 img.load() 9 fp.close()
これで、img_sequenceの各要素には画像が入りました。実際に
python
1img_sequence[1].show()
などとするとちゃんと画像が表示されます。
python
1print(len(img_sequence))
とすると2223と表示されます。一方で、
python
1images_original = np.asarray(images_original) 2print(images_original.shape)
と入力すると、
TypeError: int() argument must be a string, a bytes-like object or a number, not 'JpegImageFile'
というエラーが出るのは各画像ファイルの縦・横がバラバラだからでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/13 03:14
2018/09/13 03:17
2018/09/13 04:35
2018/09/13 04:43
2018/09/13 05:19