2017-05-18 10 views
1

WebからJPEG画像リソースを、scipy.misc.imreadによって返された配列に似たNumPy配列イメージ表現に変換しようとしています。以下の例のように画像をディスクに保存する代わりに、Numpy Arrayに画像リソースをロードする

import requests 
from scipy import misc 
def load_image(url): 
    res = requests.get(url) 
    if res == 200 and 'jpeg' in res.headers['content-type']: 
     with open('image.jpg', 'wb') as fp: 
      for chunk in res: 
       fp.write(chunk) 
     img_arr = misc.imread('image.jpg') 
     return img_arr 
    else: 
     return None 

私は画像をメモリに直接ロードしたいと思います。そうする方法はありますか?

答えて

2

scipy.misc.imreadと書いてあったので、それを使ってImage.openの部分を隠すことができました。したがって、実装は次のようになります - 他のポストに記載されているよう

from scipy import misc 

res = requests.get(url) 
img_arr = misc.imread(BytesIO(res.content)) 

パフォーマンスワイズそれは変換の四つの段階に匹敵するようです。

+0

'misc.imread'は、バイトストリームではなくファイル名の文字列をとります –

+0

@NikhilShindayしたがって、投稿されたソリューションはうまくいかなかったのですか?私のためにうまくいった。あなたのScipyバージョンは何ですか? – Divakar

+0

@NikhilShinday最新情報はありますか? – Divakar

1

私は、ディスクへの書き込みを回避する解決策が見つかりました:私の知る限り

from io import BytesIO 
import requests 
import numpy as np 
from PIL import Image 
def load_image(url): 
    res = requests.get(url) 
    if res == 200 and 'jpeg' in res.headers['content-type']: 
     img_arr = np.array(Image.open(BytesIO(res.content))) 
     return img_arr 
    else: 
     return None 

を、私は、3つの異なる表現の間の変換てる:bytes -> BytesIO -> PIL.Image -> np.array

は行うには、よりパフォーマンスの高い方法がありますそれ?

関連する問題