2010-01-27 3 views
3

J'écris du code python pour prendre une image sur le web et calculer l'écart-type, ... et faire un autre traitement d'image avec. J'ai le code suivant:Traitement d'image Python d'image directement à partir du web

from scipy import ndimage 
from urllib2 import urlopen 
from urllib import urlretrieve 
import urllib2 
import Image 
import ImageFilter 

def imagesd(imagelist): 
for imageurl in imagelist: 
    opener1 = urllib2.build_opener() 
    page1 = opener1.open(imageurl) 
    im = page1.read() 
    #localfile = urlretrieve( 
    #img = Image.fromstring("RGBA", (1,1), page1.read()) 
    #img = list(im.getdata()) 
    # page1.read() 
    print img 
    #standard_deviation(p 

Maintenant, je continue d'aller et venir parce que je ne suis pas sûr de savoir comment prendre l'image directement à partir du Web, sans l'enregistrer sur le disque, et de la transmettre à la fonction de l'écart-type.

Un conseil/aide serait grandement apprécié.

Merci.

+1

??? Vous avez l'image. Vous l'avez déballé. Vous avez une fonction d'écart-type. Pourquoi auriez-vous besoin de l'enregistrer sur le disque? Quelle est exactement la question? –

Répondre

4

Les méthodes PIL (Python Imaging Library) "fromstring" et "frombuffer" attendent les données d'image dans un format brut non compacté. Lorsque vous faites page1.read() vous obtenez les données du fichier binaire. Pour que PIL le comprenne, vous devez faire en sorte que ces données imitent un fichier et le passer à la méthode "Image.open", qui comprend le format de fichier tel qu'il est lu sur le Web (par exemple, le fichier .jpg, gif ou des données .png au lieu des valeurs de pixel brutes)

Essayez quelque chose comme ceci:

from cStringIO import StringIO 
(...) 
    data = StringIO(page1.read()) 
    img = Image.open(data) 
Questions connexes