mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-30 22:03:45 +08:00
55 lines
1.3 KiB
Python
55 lines
1.3 KiB
Python
__all__ = ['imread']
|
|
|
|
import plugin
|
|
import numpy as np
|
|
|
|
try:
|
|
from PIL import Image
|
|
has_pil = True
|
|
except ImportError:
|
|
has_pil = False
|
|
|
|
def imread(fname, as_grey=False, dtype=None):
|
|
"""Load an image from file.
|
|
|
|
"""
|
|
im = Image.open(fname)
|
|
if im.mode == 'P':
|
|
if palette_is_grayscale(im):
|
|
im = im.convert('L')
|
|
else:
|
|
im = im.convert('RGB')
|
|
|
|
if as_grey and not \
|
|
im.mode in ('1', 'L', 'I', 'F', 'I;16', 'I;16L', 'I;16B'):
|
|
im = im.convert('F')
|
|
|
|
return np.array(im, dtype=dtype)
|
|
|
|
def palette_is_grayscale(pil_image):
|
|
"""Return True if PIL image in palette mode is grayscale.
|
|
|
|
Parameters
|
|
----------
|
|
pil_image : PIL image
|
|
PIL Image that is in Palette mode.
|
|
|
|
Returns
|
|
-------
|
|
is_grayscale : bool
|
|
True if all colors in image palette are gray.
|
|
"""
|
|
assert pil_image.mode == 'P'
|
|
# get palette as an array with R, G, B columns
|
|
palette = np.asarray(pil_image.getpalette()).reshape((256, 3))
|
|
# Not all palette colors are used; unused colors have junk values.
|
|
start, stop = pil_image.getextrema()
|
|
valid_palette = palette[start:stop]
|
|
# Image is grayscale if channel differences (R - G and G - B)
|
|
# are all zero.
|
|
return np.allclose(np.diff(valid_palette), 0)
|
|
|
|
|
|
if has_pil:
|
|
plugin.register('pil', read=imread)
|