| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- from pylab import imshow, imread, show
- from matplotlib.pyplot import hist
- from scipy.misc import imresize, imsave
- class GrayscaleImage:
- def __init__(self, image_path = None, data = None):
- if image_path != None:
- self.data = imread(image_path)
- extension = image_path.split('.', 3)[-1]
- if extension == "jpg":
- self.data = self.data[::-1]
- self.convert_to_grayscale()
- elif data != None:
- self.data = data
- def __iter__(self):
- self.__i_x = -1
- self.__i_y = 0
- return self
- def next(self):
- self.__i_x += 1
- if self.__i_x == self.width:
- self.__i_x = 0
- self.__i_y += 1
- if self.__i_y == self.height:
- raise StopIteration
- return self.__i_y, self.__i_x, self[self.__i_y, self.__i_x]
- def __getitem__(self, position):
- return self.data[position]
- def convert_to_grayscale(self):
- if len(self.data.shape) > 2:
- self.data = self.data[:,:,:3].sum(axis=2) / 3
- def crop(self, rectangle):
- self.data = self.data[rectangle.y : rectangle.y + rectangle.height,
- rectangle.x : rectangle.x + rectangle.width]
- def show(self):
- imshow(self.data, cmap="gray")
- show()
- def make_histogram(self):
- return hist(self.data)
- def resize(self, size): # size is of type float
- self.data = imresize(self.data, size)
- def get_shape(self):
- return self.data.shape
- shape = property(get_shape)
- def get_width(self):
- return self.get_shape()[1]
- width = property(get_width)
- def get_height(self):
- return self.get_shape()[0]
- height = property(get_height)
- def in_bounds(self, y, x):
- return x >= 0 and x < self.width and y >= 0 and y < self.height
- def save(self, path):
- imsave(path, self.data)
|