2011-10-14 36 views
6

hãy xem xét ví dụ tái sản xuất này:Normalize NumPy mảng từ nhiều "hình ảnh" đối tượng

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) 

Output là:

>>> 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 

vì vậy tất cả các mảng là hình dạng khác nhau và loại.

Để xử lý bổ sung, tôi muốn mảng này được biểu diễn như trong biến cuối cùng lena.mpl hoặc chỉ chuyển đổi giá trị mảng thành loại float32 [0..1] được chuẩn hóa của chúng.

Cách tốt nhất để làm điều này là gì?

Trả lời

5
def normalize(arr): 
    arr=arr.astype('float32') 
    if arr.max() > 1.0: 
     arr/=255.0 
    return arr 
Các vấn đề liên quan