0
0 комментариев

Добрый день! Необходимо получать доминантный цвет изображения среди цветов, которые имеют насыщенность больше 65, а яркость больше 45. Какие варианты решения посоветуете? Есть код, но выводит цвет, который не является правильным результатом.

[apcode language=»python»]

from PIL import Image, ImageDraw
from os import listdir
from os.path import isfile
from os.path import join as joinpath
import colorsys 
import random
import operator
 # functions ###############################################################################
def get_color(img, width, height):
    colors_image = {};
    colors_array = {};
    for i in range(width):
        for j in range(height):
            tmp = img[i, j]
            if tmp in colors_image:
                colors_image[tmp] += 1 
            else:
                colors_image[tmp] = 1
    for i in colors_image:
        item = i
        color_hsv  = colorsys.rgb_to_hsv(item[0]/255, item[1]/255, item[2]/255)
        color_hsv = (round(color_hsv[0]*360, 0), round(color_hsv[1]*100, 0), round(color_hsv[2]*100, 0))
        if (color_hsv[1] > 65 and color_hsv[2] > 45):
            colors_array[i] = item
            # print(color_hsv, ': ', colors_image[i])
    color = max(colors_array.items(), key=operator.itemgetter(1))[0];
    return color
###########################################################################################
 # code ####################################################################################
mypath = "C:\\Users\\kreme\\Desktop\\GetColor\\Test_pics_test"
for el in listdir(mypath):
    if isfile(joinpath(mypath, el)):
        # open image
        image = Image.open(mypath + '\\' + el) #Открываем изображение. 
        draw = ImageDraw.Draw(image) #Создаем инструмент для рисования. 
        width = image.size[0] #Определяем ширину. 
        height = image.size[1] #Определяем высоту.
        img = image.load() #Выгружаем значения пикселей.
         # get colors 
        print(get_color(img, width, height))
    print('-------------------------------------')
input()

[/apcode]


Добавить комментарий