Нормализовать массивы 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] float32.

Как лучше всего это сделать?

5
задан theta 14 October 2011 в 21:46
поделиться