Pull to refresh

Python — средний цвет

Резко пришла идея написать программу, для распознавания среднего цвета на фотографиях.

Код был написан буквально за 15 минут, так что, если нашли какие то минусы, то пишите, исправлю.

Суть программы: на выход дать средний цвет и фото out.jpg

Пусть входное фото:

in.jpg
in.jpg

Тогда при запуске программы, мы вводим его имя с расширением, и получаем rgb и hex для среднего цвета, и цвета фона:

Цвет фона используется дальше, для выходного изображения, он на 10 единиц темнее среднего:

out.jpg
out.jpg

Для написания кода использовал библиотеку PIL:

from PIL import Image

print('Перед вводом названия файла перекиньте его в папку с программой')
print('Примечание: программа плохо работает с форматом .png')
picture_name = str(input('Введите название фото с его расширением: '))

try:
	img = Image.open(picture_name) #Файл для перебора
	obj_for_count = img.load()
	
	f = open(picture_name, "rb") #Файл для размера
	img_for_size = Image.open(f) 
	
	
	sq = [0, 0, 0] #Массив для общего подсчета
	count = img_for_size.size[0] * img_for_size.size[1] #Ширина * Высота
	
	width = img_for_size.size[0] #Ширина
	height = img_for_size.size[1] #Высота

	f.close
	
	for i in range(width): #Цикл по ширине
		for j in range(height): #Цикл по высоте
			sq[0] += obj_for_count[i, j][0] #r
			sq[1] += obj_for_count[i, j][1] #g
			sq[2] += obj_for_count[i, j][2] #b
	
	
	out = [0, 0, 0] #Массив для средних значений
	
	out[0] = int(sq[0]/count) #Средние значения
	out[1] = int(sq[1]/count)
	out[2] = int(sq[2]/count)

	print(f'Средний цвет: rgb({out[0]}, {out[1]}, {out[2]})')
	hexed = '#' + format(out[0], 'x') + format(out[1], 'x') + format(out[2], 'x') #Перевод в HEX
	print(f'hex: {hexed}')

	for i in range(len(out)): #Делаю цвет фона на 10 пунктов темнее 
		if out[i] <= 10:
			out[i] = 0
		else:
			out[i] -= 10
	
	print(f'Цвет фона: rgb({out[0]}, {out[1]}, {out[2]})')
	hexed = '#' + format(out[0], 'x') + format(out[1], 'x') + format(out[2], 'x') #Перевод в HEX
	print(f'hex: {hexed}')

	img_for_out = Image.new("RGB", (int(width*1.5), int(height*1.5)), (out[0], out[1], out[2])) #Создание файла widthхheight с фоном среднего цвета

	img_for_out.paste(img, (int(width/4), int(height/4)))
	img.close

	img_for_out.save('out.jpg') #Запись файла в папку
	img_for_out.show() #Показ файла
	img_for_out.close
except:
	print('ERROR: Файл не найден')

Программа плохо работает с форматом .png:

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.