5

please consider this reproducible example:

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

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

so all arrays are of different shape and type.

For additional processing I would like this arrays to be represented as in last variable lena.mpl, or just to transform array values to their normalized [0..1] float32 type.

What is the best way to do this?

1 Answer 1

5
def normalize(arr):
    arr=arr.astype('float32')
    if arr.max() > 1.0:
        arr/=255.0
    return arr
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.