def _convolute_over_image(img, kernel, write=True): import pyifx.misc as misc new_img = np.empty(shape=img.get_image().shape) k_height = math.floor(kernel.shape[0]/2) k_width = math.floor(kernel.shape[1]/2) for r in range(len(img.get_image())): for p in range(len(img.get_image()[r])): for c in range(len(img.get_image()[r][p])): new_pixel_value = 0 for row in range(-k_height, k_height+1): for column in range(-k_width, k_width+1): try: new_pixel_value += img.get_image()[r+column][p+row][c]*kernel[row+k_height][column+k_width] except IndexError: pass new_img[r][p][c] = min(255, max(0, new_pixel_value)) new_img = misc.PyifxImage(img.get_input_path(), img.get_output_path(), new_img, False) if write: _write_file(new_img) return new_img
def _combine_operation(img1, img2, out_path, write=True): import pyifx.misc as misc _type_checker(img1, [misc.PyifxImage]) _type_checker(img2, [misc.PyifxImage]) _type_checker(out_path, [str]) if img1.get_image().shape[0]*img1.get_image().shape[0] <= img2.get_image().shape[0]*img2.get_image().shape[1]: shape = img1.get_image().shape else: shape = img2.get_image().shape new_img = np.empty(shape) for r in range(len(img1.get_image())): for p in range(len(img1.get_image()[r])): for c in range(len(img1.get_image()[r][p])): try: new_img[r][p][c] = min(255, max(0, (int(img1.get_image()[r][p][c])+int(img2.get_image()[r][p][c]))/2)) except IndexError: pass img = misc.PyifxImage(None, out_path, new_img, False) if write: _write_file(img) return img
def _resize_operation(img, new_size, write=True): import pyifx.misc as misc img_size = [int(d) for d in new_size.split('x')] if len(img_size) != 2: raise ValueError("Invalid value used: Invalid size entered. Please use the format: 'WxH'") img_size.append(3) img_size[0], img_size[1] = img_size[1], img_size[0] width_factor = img_size[1]/img.get_image().shape[1] height_factor = img_size[0]/img.get_image().shape[0] new_img = np.full(shape=img_size, fill_value=None) for r in range(len(new_img)): for p in range(len(new_img[r])): for c in range(len(new_img[r][p])): if new_img[r][p][c] != None: new_img[r][p][c] += img.get_image()[math.floor(r/height_factor)][math.floor(p/width_factor)][c] new_img[r][p][c] = math.floor(new_img[r][p][c]/2) else: new_img[r][p][c] = img.get_image()[math.floor(r/height_factor)][math.floor(p/width_factor)][c] new_img = misc.PyifxImage(img.get_input_path(), img.get_output_path(), new_img, False) if write: _write_file(new_img) return new_img
def _color_overlay_operation(img, color, opacity, write=True): import pyifx.misc as misc new_img = np.empty(shape=img.get_image().shape) for row in range(len(new_img)): for p in range(len(new_img[row])): for v in range(len(new_img[row][p])): diff = (color[v]-img.get_image()[row][p][v])*opacity new_img[row][p][v] = min(255, max(img.get_image()[row][p][v]+diff, 0)) new_img = misc.PyifxImage(img.get_input_path(), img.get_output_path(), new_img, False) if write: _write_file(new_img) return new_img
def _brightness_operation(img, percent, method, write=True): import pyifx.misc as misc new_img = np.empty(shape=img.get_image().shape) for row in range(len(new_img)): for p in range(len(new_img[row])): for v in range(len(new_img[row][p])): value = img.get_image()[row][p][v] if method == "b": new_img[row][p][v] = min(255, value*(1+percent)-(value/6)) elif method == "d": new_img[row][p][v] = max(0, value*(1-percent)+(value/6)) else: raise Exception("An internal error occurred.") new_img = misc.PyifxImage(img.get_input_path(), img.get_output_path(), new_img, False) if write: _write_file(new_img) return new_img
def _pixelate_operation(img, factor, write=True): import pyifx.misc as misc new_img = np.empty(shape=img.get_image().shape) for r in range(0, len(new_img)-factor, factor+1): for p in range(0, len(new_img[r])-factor, factor+1): value = img.get_image()[r][p] for row_fill in range(r, r+factor+1): for column_fill in range(p, p+factor+1): new_img[row_fill][column_fill] = value new_img = misc.PyifxImage(img.get_input_path(), img.get_output_path(), new_img, False) if write: _write_file(new_img) return new_img
def _saturation_operation(img, percent, method, write=True): import pyifx.misc as misc type_map = {"s": 1, "ds": -1} new_img = np.empty(shape=img.get_image().shape) for row in range(len(new_img)): for p in range(len(new_img[row])): gray_val = sum(img.get_image()[row][p])/3 for v in range(len(new_img[row][p])): value = img.get_image()[row][p][v] diff = gray_val - value pixel_change = diff * (type_map[method]*percent) new_img[row][p][v] = max(0, min((img.get_image()[row][p][v]-pixel_change), 255)) new_img = misc.PyifxImage(img.get_input_path(), img.get_output_path(), new_img, False) if write: _write_file(new_img) return new_img