Python PIL.Image 模块,html() 实例源码
我们从Python开源项目中,提取了以下49个代码示例,用于说明如何使用PIL.Image.html()。
def brightness(x, gamma=1, gain=1, is_random=False):
"""Change the brightness of a single image,randomly or non-randomly.
Parameters
-----------
x : numpy array
An image with dimension of [row,col,channel] (default).
gamma : float,small than 1 means brighter.
Non negative real number. Default value is 1.
- If is_random is True,gamma in a range of (1-gamma,1+gamma).
gain : float
The constant multiplier. Default value is 1.
is_random : boolean,default False
- If True,randomly change brightness.
References
-----------
- `skimage.exposure.adjust_gamma <http://scikit-image.org/docs/dev/api/skimage.exposure.html>`_
- `chinese blog <http://www.cnblogs.com/denny402/p/5124402.html>`_
"""
if is_random:
gamma = np.random.uniform(1-gamma, 1+gamma)
x = exposure.adjust_gamma(x, gamma, gain)
return x
def brightness(x,small than 1 means brighter.
Non negative real number. Default value is 1,smaller means brighter.
- If is_random is True, gain)
return x
def erosion(x, radius=3):
""" Return greyscale morphological erosion of an image,
see `skimage.morphology.erosion <http://scikit-image.org/docs/dev/api/skimage.morphology.html#skimage.morphology.erosion>`_.
Parameters
-----------
x : 2D array image.
radius : int for the radius of mask.
"""
from skimage.morphology import disk, dilation, erosion
mask = disk(radius)
x = erosion(x, selem=mask)
return x
## Object Detection
def brightness(x,small than 1 means brighter.
Non negative real number. Default value is 1.
- If is_random is True, gain)
return x
def trans_image(idx, img_arr):
# https://docs.scipy.org/doc/numpy/reference/routines.math.html
#img_arr = np.add(np.multiply(255.0,img_arr),255.0)
img_arr = np.multiply(255.0, img_arr) # ????????255
img_arr = np.array(img_arr, dtype=np.uint8) # ???0-255?????
img_arr = img_arr.reshape(28, 28) # ???28*28??????
# print(img_arr)
# imgplot = plt.imshow(img,cmap='gray') #??????
img_1 = Image.fromarray(img_arr)
out_file = out_dir % idx
# ???BMP?????????????????????????
img_1.save(out_file, format="BMP")
return img_arr
def rotation(x, rg=20, is_random=False, row_index=0, col_index=1, channel_index=2,
fill_mode='nearest', cval=0.):
"""Rotate an image randomly or non-randomly.
Parameters
-----------
x : numpy array
An image with dimension of [row,channel] (default).
rg : int or float
Degree to rotate,usually 0 ~ 180.
is_random : boolean,default False
If True,randomly rotate.
row_index,col_index,channel_index : int
Index of row,col and channel,default (0,1,2),for theano (1,2,0).
fill_mode : string
Method to fill missing pixel,default ‘nearest’,more options ‘constant’,‘reflect’ or ‘wrap’
- `scipy ndimage affine_transform <https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.interpolation.affine_transform.html>`_
cval : scalar,optional
Value used for points outside the boundaries of the input if mode='constant'. Default is 0.0
- `scipy ndimage affine_transform <https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.interpolation.affine_transform.html>`_
Examples
---------
>>> x --> [row,1] greyscale
>>> x = rotation(x,rg=40,is_random=False)
>>> tl.visualize.frame(x[:,:,0],second=0.01,saveable=True,name='temp',cmap='gray')
"""
if is_random:
theta = np.pi / 180 * np.random.uniform(-rg, rg)
else:
theta = np.pi /180 * rg
rotation_matrix = np.array([[np.cos(theta), -np.sin(theta), 0],
[np.sin(theta), np.cos(theta),
[0, 0, 1]])
h, w = x.shape[row_index], x.shape[col_index]
transform_matrix = transform_matrix_offset_center(rotation_matrix, h, w)
x = apply_transform(x, transform_matrix, channel_index, fill_mode, cval)
return x
def shift(x, wrg=0.1, hrg=0.1,
fill_mode='nearest', cval=0.):
"""Shift an image randomly or non-randomly.
Parameters
-----------
x : numpy array
An image with dimension of [row,channel] (default).
wrg : float
Percentage of shift in axis x,usually -0.25 ~ 0.25.
hrg : float
Percentage of shift in axis y,usually -0.25 ~ 0.25.
is_random : boolean,randomly shift.
row_index,‘reflect’ or ‘wrap’.
- `scipy ndimage affine_transform <https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.interpolation.affine_transform.html>`_
cval : scalar,optional
Value used for points outside the boundaries of the input if mode='constant'. Default is 0.0.
- `scipy ndimage affine_transform <https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.interpolation.affine_transform.html>`_
"""
h, x.shape[col_index]
if is_random:
tx = np.random.uniform(-hrg, hrg) * h
ty = np.random.uniform(-wrg, wrg) * w
else:
tx, ty = hrg * h, wrg * w
translation_matrix = np.array([[1, tx],
[0, 1, ty], 1]])
transform_matrix = translation_matrix # no need to do offset
x = apply_transform(x, cval)
return x
def shear(x, intensity=0.1, cval=0.):
"""Shear an image randomly or non-randomly.
Parameters
-----------
x : numpy array
An image with dimension of [row,channel] (default).
intensity : float
Percentage of shear,usually -0.5 ~ 0.5 (is_random==True),0 ~ 0.5 (is_random==False),
you can have a quick try by shear(X,1).
is_random : boolean,randomly shear.
row_index,optional
Value used for points outside the boundaries of the input if mode='constant'. Default is 0.0.
- `scipy ndimage affine_transform <https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.interpolation.affine_transform.html>`_
"""
if is_random:
shear = np.random.uniform(-intensity, intensity)
else:
shear = intensity
shear_matrix = np.array([[1, -np.sin(shear),
[0, np.cos(shear), x.shape[col_index]
transform_matrix = transform_matrix_offset_center(shear_matrix, cval)
return x
def imresize(x, size=[100, 100], interp='bilinear', mode=None):
"""Resize an image by given output size and method. Warning,this function
will rescale the value to [0,255].
Parameters
-----------
x : numpy array
An image with dimension of [row,channel] (default).
size : int,float or tuple (h,w)
- int,Percentage of current size.
- float,Fraction of current size.
- tuple,Size of the output image.
interp : str,optional
Interpolation to use for re-sizing (‘nearest’,‘lanczos’,‘bilinear’,‘bicubic’ or ‘cubic’).
mode : str,optional
The PIL image mode (‘P’,‘L’,etc.) to convert arr before resizing.
Returns
--------
imresize : ndarray
The resized array of image.
References
------------
- `scipy.misc.imresize <https://docs.scipy.org/doc/scipy/reference/generated/scipy.misc.imresize.html>`_
"""
if x.shape[-1] == 1:
# greyscale
x = scipy.misc.imresize(x[:,0], size, interp=interp, mode=mode)
return x[:, :, np.newaxis]
elif x.shape[-1] == 3:
# rgb,bgr ..
return scipy.misc.imresize(x, mode=mode)
else:
raise Exception("Unsupported channel %d" % x.shape[-1])
# normailization
def channel_shift(x, intensity, channel_index=2):
"""Shift the channels of an image,randomly or non-randomly,see `numpy.rollaxis <https://docs.scipy.org/doc/numpy/reference/generated/numpy.rollaxis.html>`_.
Parameters
-----------
x : numpy array
An image with dimension of [row,channel] (default).
intensity : float
Intensity of shifting.
is_random : boolean,randomly shift.
channel_index : int
Index of channel,default 2.
"""
if is_random:
factor = np.random.uniform(-intensity, intensity)
else:
factor = intensity
x = np.rollaxis(x, 0)
min_x, max_x = np.min(x), np.max(x)
channel_images = [np.clip(x_channel + factor, min_x, max_x)
for x_channel in x]
x = np.stack(channel_images, axis=0)
x = np.rollaxis(x, channel_index+1)
return x
# x = np.rollaxis(x,channel_index,0)
# min_x,max_x = np.min(x),np.max(x)
# channel_images = [np.clip(x_channel + np.random.uniform(-intensity,intensity),min_x,max_x)
# for x_channel in x]
# x = np.stack(channel_images,axis=0)
# x = np.rollaxis(x,channel_index+1)
# return x
def channel_shift_multi(x, channel_index=2):
"""Shift the channels of images with the same arguments,see `numpy.rollaxis <https://docs.scipy.org/doc/numpy/reference/generated/numpy.rollaxis.html>`_ .
Usually be used for image segmentation which x=[X,Y],X and Y should be matched.
Parameters
-----------
x : list of numpy array
List of images with dimension of [n_images,row,channel] (default).
others : see ``channel_shift``.
"""
if is_random:
factor = np.random.uniform(-intensity, intensity)
else:
factor = intensity
results = []
for data in x:
data = np.rollaxis(data, 0)
min_x, max_x = np.min(data), np.max(data)
channel_images = [np.clip(x_channel + factor, max_x)
for x_channel in x]
data = np.stack(channel_images, axis=0)
data = np.rollaxis(x, channel_index+1)
results.append( data )
return np.asarray(results)
# noise
def apply_transform(x, fill_mode='nearest', cval=0.):
"""Return transformed images by given transform_matrix from ``transform_matrix_offset_center``.
Parameters
----------
x : numpy array
Batch of images with dimension of 3,[batch_size,channel].
transform_matrix : numpy array
Transform matrix (offset center),can be generated by ``transform_matrix_offset_center``
channel_index : int
Index of channel,default 2.
fill_mode : string
Method to fill missing pixel,optional
Value used for points outside the boundaries of the input if mode='constant'. Default is 0.0
- `scipy ndimage affine_transform <https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.interpolation.affine_transform.html>`_
Examples
--------
- See ``rotation``,``shift``,``shear``,``zoom``.
"""
x = np.rollaxis(x, 0)
final_affine_matrix = transform_matrix[:2, :2]
final_offset = transform_matrix[:2, 2]
channel_images = [ndi.interpolation.affine_transform(x_channel, final_affine_matrix,
final_offset, order=0, mode=fill_mode, cval=cval) for x_channel in x]
x = np.stack(channel_images, channel_index+1)
return x
def array_to_img(x, dim_ordering=(0,1,2), scale=True):
"""Converts a numpy array to PIL image object (uint8 format).
Parameters
----------
x : numpy array
A image with dimension of 3 and channels of 1 or 3.
dim_ordering : list or tuple of 3 int
Index of row,0).
scale : boolean,default is True
If True,converts image to [0,255] from any range of value like [-1,2].
References
-----------
- `PIL Image.fromarray <http://pillow.readthedocs.io/en/3.1.x/reference/Image.html?highlight=fromarray>`_
"""
from PIL import Image
# if dim_ordering == 'default':
# dim_ordering = K.image_dim_ordering()
# if dim_ordering == 'th': # theano
# x = x.transpose(1,0)
x = x.transpose(dim_ordering)
if scale:
x += max(-np.min(x), 0)
x_max = np.max(x)
if x_max != 0:
# print(x_max)
# x /= x_max
x = x / x_max
x *= 255
if x.shape[2] == 3:
# RGB
return Image.fromarray(x.astype('uint8'), 'RGB')
elif x.shape[2] == 1:
# grayscale
return Image.fromarray(x[:, 0].astype('uint8'), 'L')
else:
raise Exception('Unsupported channel number: ', x.shape[2])
## Sequence
def shift(x, cval=0., order=1):
"""Shift an image randomly or non-randomly.
Parameters
-----------
x : numpy array
An image with dimension of [row,optional
Value used for points outside the boundaries of the input if mode='constant'. Default is 0.0.
order : int,optional
The order of interpolation. The order has to be in the range 0-5. See ``apply_transform``.
- `scipy ndimage affine_transform <https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.interpolation.affine_transform.html>`_
"""
h, cval, order)
return x
def imresize(x, interp='bicubic', mode=mode)
else:
raise Exception("Unsupported channel %d" % x.shape[-1])
# value scale
def channel_shift_multi(x, channel_index+1)
results.append( data )
return np.asarray(results)
# noise
def find_contours(x, level=0.8, fully_connected='low', positive_orientation='low'):
""" Find iso-valued contours in a 2D array for a given level value,returns list of (n,2)-ndarrays
see `skimage.measure.find_contours <http://scikit-image.org/docs/dev/api/skimage.measure.html#skimage.measure.find_contours>`_ .
Parameters
------------
x : 2D ndarray of double. Input data in which to find contours.
level : float. Value along which to find contours in the array.
fully_connected : str,{‘low’,‘high’}. Indicates whether array elements below the given level value are to be considered fully-connected (and hence elements above the value will only be face connected),or vice-versa. (See notes below for details.)
positive_orientation : either ‘low’ or ‘high’. Indicates whether the output contours will produce positively-oriented polygons around islands of low- or high-valued elements. If ‘low’ then contours will wind counter-clockwise around elements below the iso-value. Alternately,this means that low-valued elements are always on the left of the contour.
"""
return skimage.measure.find_contours(x, level, positive_orientation='low')
def binary_dilation(x, radius=3):
""" Return fast binary morphological dilation of an image.
see `skimage.morphology.binary_dilation <http://scikit-image.org/docs/dev/api/skimage.morphology.html#skimage.morphology.binary_dilation>`_.
Parameters
-----------
x : 2D array image.
radius : int for the radius of mask.
"""
from skimage.morphology import disk, binary_dilation
mask = disk(radius)
x = binary_dilation(x, selem=mask)
return x
def dilation(x, radius=3):
""" Return greyscale morphological dilation of an image,
see `skimage.morphology.dilation <http://scikit-image.org/docs/dev/api/skimage.morphology.html#skimage.morphology.dilation>`_.
Parameters
-----------
x : 2D array image.
radius : int for the radius of mask.
"""
from skimage.morphology import disk, dilation
mask = disk(radius)
x = dilation(x, selem=mask)
return x
def imresize(x, mode=mode)
else:
raise Exception("Unsupported channel %d" % x.shape[-1])
# normailization
def channel_shift_multi(x, channel_index+1)
results.append( data )
return np.asarray(results)
# noise
def channel_shift_multi(x, channel_index+1)
results.append( data )
return np.asarray(results)
# manual transform
def swirl(x, center=None, strength=1, radius=100, rotation=0, output_shape=None, order=1, mode='constant', cval=0, clip=True, preserve_range=False, is_random=False):
"""Swirl an image randomly or non-randomly,see `scikit-image swirl API <http://scikit-image.org/docs/dev/api/skimage.transform.html#skimage.transform.swirl>`_
and `example <http://scikit-image.org/docs/dev/auto_examples/plot_swirl.html>`_.
Parameters
-----------
x : numpy array
An image with dimension of [row,channel] (default).
center : (row,column) tuple or (2,) ndarray,optional
Center coordinate of transformation.
strength : float,optional
The amount of swirling applied.
radius : float,optional
The extent of the swirl in pixels. The effect dies out rapidly beyond radius.
rotation : float,(degree) optional
Additional rotation applied to the image,usually [0,360],relates to center.
output_shape : tuple (rows,cols),optional
Shape of the output image generated. By default the shape of the input image is preserved.
order : int,optional
The order of the spline interpolation,default is 1. The order has to be in the range 0-5. See skimage.transform.warp for detail.
mode : {‘constant’,‘edge’,‘symmetric’,‘reflect’,‘wrap’},optional
Points outside the boundaries of the input are filled according to the given mode,with ‘constant’ used as the default. Modes match the behavIoUr of numpy.pad.
cval : float,optional
Used in conjunction with mode ‘constant’,the value outside the image boundaries.
clip : bool,optional
Whether to clip the output to the range of values of the input image. This is enabled by default,since higher order interpolation may produce values outside the given input range.
preserve_range : bool,optional
Whether to keep the original range of values. Otherwise,the input image is converted according to the conventions of img_as_float.
is_random : boolean,random swirl.
- random center = [(0 ~ x.shape[0]),(0 ~ x.shape[1])]
- random strength = [0,strength]
- random radius = [1e-10,radius]
- random rotation = [-rotation,rotation]
Examples
---------
>>> x --> [row,1] greyscale
>>> x = swirl(x,strength=4,radius=100)
"""
assert radius != 0, Exception("Invalid radius value")
rotation = np.pi / 180 * rotation
if is_random:
center_h = int(np.random.uniform(0, x.shape[0]))
center_w = int(np.random.uniform(0, x.shape[1]))
center = (center_h, center_w)
strength = np.random.uniform(0, strength)
radius = np.random.uniform(1e-10, radius)
rotation = np.random.uniform(-rotation, rotation)
max_v = np.max(x)
if max_v > 1: # Note: the input of this fn should be [-1,1],rescale is required.
x = x / max_v
swirled = skimage.transform.swirl(x, center=center, strength=strength, radius=radius, rotation=rotation,
output_shape=output_shape, order=order, mode=mode, cval=cval, clip=clip, preserve_range=preserve_range)
if max_v > 1:
swirled = swirled * max_v
return swirled
def elastic_transform(x, alpha, sigma, mode="constant", is_random=False):
"""Elastic deformation of images as described in `[Simard2003] <http://deeplearning.cs.cmu.edu/pdfs/Simard.pdf>`_ .
Parameters
-----------
x : numpy array,a greyscale image.
alpha : scalar factor.
sigma : scalar or sequence of scalars,the smaller the sigma,the more transformation.
Standard deviation for Gaussian kernel. The standard deviations of the Gaussian filter are given for each axis as a sequence,or as a single number,in which case it is equal for all axes.
mode : default constant,see `scipy.ndimage.filters.gaussian_filter <https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.filters.gaussian_filter.html>`_.
cval : float,optional. Used in conjunction with mode ‘constant’,the value outside the image boundaries.
is_random : boolean,default False
Examples
---------
>>> x = elastic_transform(x,alpha = x.shape[1] * 3,sigma = x.shape[1] * 0.07)
References
------------
- `Github <https://gist.github.com/chsasank/4d8f68caf01f041a6453e67fb30f8f5a>`_.
- `kaggle <https://www.kaggle.com/pscion/ultrasound-nerve-segmentation/elastic-transform-for-data-augmentation-0878921a>`_
"""
if is_random is False:
random_state = np.random.RandomState(None)
else:
random_state = np.random.RandomState(int(time.time()))
#
is_3d = False
if len(x.shape) == 3 and x.shape[-1] == 1:
x = x[:,0]
is_3d = True
elif len(x.shape) == 3 and x.shape[-1] != 1:
raise Exception("Only support greyscale image")
assert len(x.shape)==2
shape = x.shape
dx = gaussian_filter((random_state.rand(*shape) * 2 - 1), cval=cval) * alpha
dy = gaussian_filter((random_state.rand(*shape) * 2 - 1), cval=cval) * alpha
x_, y_ = np.meshgrid(np.arange(shape[0]), np.arange(shape[1]), indexing='ij')
indices = np.reshape(x_ + dx, (-1, 1)), np.reshape(y_ + dy, 1))
if is_3d:
return map_coordinates(x, indices, order=1).reshape((shape[0], shape[1], 1))
else:
return map_coordinates(x, order=1).reshape(shape)
def rotation(x, order=1):
"""Rotate an image randomly or non-randomly.
Parameters
-----------
x : numpy array
An image with dimension of [row,optional
Value used for points outside the boundaries of the input if mode='constant'. Default is 0.0
order : int,optional
The order of interpolation. The order has to be in the range 0-5. See ``apply_transform``.
- `scipy ndimage affine_transform <https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.interpolation.affine_transform.html>`_
Examples
---------
>>> x --> [row, order)
return x
def shear(x, order=1):
"""Shear an image randomly or non-randomly.
Parameters
-----------
x : numpy array
An image with dimension of [row,optional
The order of interpolation. The order has to be in the range 0-5. See ``apply_transform``.
- `scipy ndimage affine_transform <https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.interpolation.affine_transform.html>`_
References
-----------
- `Affine transformation <https://uk.mathworks.com/discovery/affine-transformation.html>`_
"""
if is_random:
shear = np.random.uniform(-intensity, order)
return x
def shear2(x, shear=(0.1, 0.1),channel] (default).
shear : tuple of two floats
Percentage of shear for height and width direction (0,optional
The order of interpolation. The order has to be in the range 0-5. See ``apply_transform``.
- `scipy ndimage affine_transform <https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.interpolation.affine_transform.html>`_
References
-----------
- `Affine transformation <https://uk.mathworks.com/discovery/affine-transformation.html>`_
"""
assert len(shear) == 2, "shear should be tuple of 2 floats,or you want to use tl.prepro.shear rather than tl.prepro.shear2 ?"
if is_random:
shear[0] = np.random.uniform(-shear[0], shear[0])
shear[1] = np.random.uniform(-shear[1], shear[1])
shear_matrix = np.array([[1, shear[0],
[shear[1], order)
return x
def swirl(x, preserve_range=preserve_range)
if max_v > 1:
swirled = swirled * max_v
return swirled
def zoom(x, zoom_range=(0.9, 1.1),
fill_mode='nearest', order=1):
"""Zoom in and out of a single image,channel] (default).
zoom_range : list or tuple
- If is_random=False,(h,w) are the fixed zoom factor for row and column axies,factor small than one is zoom in.
- If is_random=True,it is (min zoom out,max zoom out) for x and y with different random zoom in/out factor.
e.g (0.5,1) zoom in 1~2 times.
is_random : boolean,randomly zoom.
row_index,optional
The order of interpolation. The order has to be in the range 0-5. See ``apply_transform``.
- `scipy ndimage affine_transform <https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.interpolation.affine_transform.html>`_
"""
if len(zoom_range) != 2:
raise Exception('zoom_range should be a tuple or list of two floats. '
'Received arg: ', zoom_range)
if is_random:
if zoom_range[0] == 1 and zoom_range[1] == 1:
zx, zy = 1, 1
print(" random_zoom : not zoom in/out")
else:
zx, zy = np.random.uniform(zoom_range[0], zoom_range[1], 2)
else:
zx, zy = zoom_range
# print(zx,zy)
zoom_matrix = np.array([[zx,
[0, zy, x.shape[col_index]
transform_matrix = transform_matrix_offset_center(zoom_matrix, order)
return x
def projective_transform_by_points(x, src, dst, map_args={}, cval=0.0, preserve_range=False):
"""Projective transform by given coordinates,usually 4 coordinates. see `scikit-image <http://scikit-image.org/docs/dev/auto_examples/applications/plot_geometric.html>`_.
Parameters
-----------
x : numpy array
An image with dimension of [row,channel] (default).
src : list or numpy
The original coordinates,usually 4 coordinates of (width,height).
dst : list or numpy
The coordinates after transformation,the number of coordinates is the same with src.
map_args : dict,optional
Keyword arguments passed to inverse_map.
output_shape : tuple (rows,optional
Shape of the output image generated. By default the shape of the input image is preserved. Note that,even for multi-band images,only rows and columns need to be specified.
order : int,optional
The order of interpolation. The order has to be in the range 0-5:
- 0 Nearest-neighbor
- 1 Bi-linear (default)
- 2 Bi-quadratic
- 3 Bi-cubic
- 4 Bi-quartic
- 5 Bi-quintic
mode : {‘constant’,optional
Points outside the boundaries of the input are filled according to the given mode. Modes match the behavIoUr of numpy.pad.
cval : float,the input image is converted according to the conventions of img_as_float.
Examples
--------
>>> Assume X is an image from CIFAR 10,i.e. shape == (32,32,3)
>>> src = [[0,[0,32],[32,32]] # [w,h]
>>> dst = [[10,10],32]]
>>> x = projective_transform_by_points(X,src,dst)
References
-----------
- `scikit-image : geometric transformations <http://scikit-image.org/docs/dev/auto_examples/applications/plot_geometric.html>`_
- `scikit-image : examples <http://scikit-image.org/docs/dev/auto_examples/index.html>`_
"""
if type(src) is list: # convert to numpy
src = np.array(src)
if type(dst) is list:
dst = np.array(dst)
if np.max(x)>1: # convert to [0,1]
x = x/255
m = transform.ProjectiveTransform()
m.estimate(dst, src)
warped = transform.warp(x, m, map_args=map_args, output_shape=output_shape, preserve_range=preserve_range)
return warped
# Numpy and PIL
def swirl(x, preserve_range=preserve_range)
if max_v > 1:
swirled = swirled * max_v
return swirled
def zoom(x, cval=0.):
"""Zoom in and out of a single image,(min zoom out,optional
Value used for points outside the boundaries of the input if mode='constant'. Default is 0.0.
- `scipy ndimage affine_transform <https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.interpolation.affine_transform.html>`_
"""
if len(zoom_range) != 2:
raise Exception('zoom_range should be a tuple or list of two floats. '
'Received arg: ', cval)
return x
def projective_transform_by_points(x,usually 4 coordinates of (x,y).
dst : list or numpy
The coordinates after transformation,optional
The order of interpolation. The order has to be in the range 0-5:
- 0 Nearest-neighbor
- 1 Bi-linear (default)
- 2 Bi-quadratic
- 3 Bi-cubic
- 4 Bi-quartic
- 5 Bi-quintic
mode : {‘constant’,32]]
>>> dst = [[10, preserve_range=preserve_range)
return warped
# Numpy and PIL
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。