python library for downsampling a photo
skimage_resized = resize(mask, (mask.shape[0]//2, mask.shape[1]//2), mode='constant') print(skimage_resized.shape, np.unique(mask_resized)) skimage_rescale = rescale(mask, 1.0/2.0, mode='constant') print(skimage_rescale.shape, np.unique(mask_resized)) ndimage_resized = ndimage.interpolation.zoom(mask, 0.5) print(ndimage_resized.shape, np.unique(mask_resized)) cv2_resized = cv2.resize(mask, (mask.shape[0]//2, mask.shape[1]//2), interpolation=cv2.INTER_NEAREST) print(cv2_resized.shape, np.unique(mask_resized)) mask_pil = Image.fromarray(mask, mode=None) pil_resized = mask_pil.thumbnail((mask.shape[0]//2, mask.shape[1]//2), Image.NEAREST) print(skimage_resized.shape, np.unique(pil_resized))
Source: stackoverflow.com
python downsample image
import numpy as np from scipy import ndimage def block_mean(ar, fact): assert isinstance(fact, int), type(fact) sx, sy = ar.shape X, Y = np.ogrid[0:sx, 0:sy] regions = sy/fact * (X/fact) + Y/fact res = ndimage.mean(ar, labels=regions, index=np.arange(regions.max() + 1)) res.shape = (sx/fact, sy/fact) return res # Example: ar = np.random.rand(20000).reshape((100, 200)) block_mean(ar, 5).shape # (20, 40)
Source: stackoverflow.com