2011-10-14 19 views
6

इस प्रतिलिपि प्रस्तुत करने योग्य उदाहरण पर विचार करें:विभिन्न "छवि" से मानक के अनुसार NumPy सरणी वस्तुओं

from PIL import Image 
import numpy as np 
import scipy.misc as sm 
import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 
import matplotlib.cbook as cbook 
import urllib 

datafile = cbook.get_sample_data('lena.jpg') 
lena_pil = Image.open(datafile) 
lena_pil_np = np.asarray(lena_pil) 

lena_scipy = sm.lena() 

lena_tmp = open('lena_tmp.png', 'wb') 
lena_tmp.write(urllib.urlopen('http://optipng.sourceforge.net/pngtech/img/lena.png').read()) 
lena_tmp.close() 

lena_mpl = mpimg.imread('lena_tmp.png') 

sm.info(lena_pil_np) 
sm.info(lena_scipy) 
sm.info(lena_mpl) 

आउटपुट है:

>>> sm.info(lena_pil_np) 
class: ndarray 
shape: (512, 512, 3) 
strides: (1536, 3, 1) 
itemsize: 1 
aligned: True 
contiguous: True 
fortran: False 
data pointer: 0xb707e01cL 
byteorder: little 
byteswap: False 
type: uint8 

>>> sm.info(lena_scipy) 
class: ndarray 
shape: (512, 512) 
strides: (2048, 4) 
itemsize: 4 
aligned: True 
contiguous: True 
fortran: False 
data pointer: 0xb6f7d008L 
byteorder: little 
byteswap: False 
type: int32 

>>> sm.info(lena_mpl) 
class: ndarray 
shape: (512, 512, 3) 
strides: (6144, 12, 4) 
itemsize: 4 
aligned: True 
contiguous: True 
fortran: False 
data pointer: 0xb6c7b008L 
byteorder: little 
byteswap: False 
type: float32 

इसलिए सभी सरणियों विभिन्न आकार और प्रकार के हैं।

अतिरिक्त प्रसंस्करण के लिए मैं इस सरणी को अंतिम चर lena.mpl में प्रदर्शित करना चाहता हूं, या सिर्फ सरणी मानों को उनके सामान्यीकृत [0..1] फ्लोट 32 प्रकार में बदलने के लिए।

ऐसा करने का सबसे अच्छा तरीका क्या है?

उत्तर

5
def normalize(arr): 
    arr=arr.astype('float32') 
    if arr.max() > 1.0: 
     arr/=255.0 
    return arr 
संबंधित मुद्दे