import cv2
import numpy as np
from matplotlib import pyplot as plt

def ThresholdEverything(img):
	ret,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
	th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,2)
	th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
	titles = ['Original Image', 'Global Thresholding (v = 127)',
	'Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
	images = [img, th1, th2, th3]
	for i in xrange(4):
		plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')
		plt.title(titles[i])
		plt.xticks([]),plt.yticks([])
	plt.show()
	return images

def GlobalThresholding(img):
	ret,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
	plt.plot(), plt.imshow(th1, 'gray')
	plt.title('Global Thresholding (v = 127)')
	plt.show()
	return th1

def AdaptiveMeanThresholding(img):
	th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,2)
	plt.plot(), plt.imshow(th2, 'gray')
	plt.title('Adaptive Mean Thresholding')
	plt.show()
	return th2

def AdaptiveGaussianThresholding(img):
	th3 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
	plt.plot(), plt.imshow(th3, 'gray')
	plt.title('Adaptive Gaussian Thresholding')
	plt.show()
	return th3

def ThresholdChoiceProcessing(img, choice):
	if choice == '1':
		img = GlobalThresholding(img)
		return img
	elif choice == '2':
		img = AdaptiveMeanThresholding(img)
		return img
	elif choice == '3':
		img = AdaptiveGaussianThresholding(img)
		return img
	elif choice == '4':
		img = ThresholdEverything(img)
		return img
	else:
		return


def ThresholdChoice() :
	image = None
	print('\t\tThreshold Menu\n')
	while (image is None):
		image = str(raw_input('\tImage to use? By default couleur.png \n'))
		if not image:
			image = 'couleur.png'
		image = cv2.imread(str(image), 0)
	img = cv2.medianBlur(image,5)
	print ('\t1. Global Thresholding\n\t2. Adaptive Mean Thresholding\n\t3. Adaptive Gaussian Thresholding\n\t4. Everything\n')
	choice = raw_input('\n\tMultiple choices possible\n')
	for i in range (0, len(choice)):
		img = image.copy()
		img = ThresholdChoiceProcessing(img, choice[i])
	return

