Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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
Пример #7
0
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