Как вывести название доминирующего цвета после определения доминирующего цвета? - PullRequest
0 голосов
/ 06 марта 2020

Предположим, что количество пикселей для каждого цвета подсчитано на изображении.

И количество пикселей напечатано, как в следующем коде.

x=np.count_nonzero(frame)
x1=np.count_nonzero(red_mask)
x2=np.count_nonzero(blue_mask)
x3=np.count_nonzero(green_mask)
x4=np.count_nonzero(orange_mask)
x5=np.count_nonzero(yellow_mask)
x6=np.count_nonzero(cyan_mask)
x7=np.count_nonzero(black_mask)
x8=np.count_nonzero(gray_mask)
x9=np.count_nonzero(white_mask)
x10=np.count_nonzero(violet_mask)
x11=np.count_nonzero(brown_mask)

print('total number of pixels in  image', x)
print('Red is ', x1)
print('Blue is', x2)
print('Green is', x3)
print('Orange is', x4)
print('Yellow is', x5)
print('Cyan is ', x6)
print('Black is', x7)
print('Gray is', x8)
print('White is', x9)
print('Violet is', x10)
print('Brown is', x11)

Как вывести доминирующий цвет, рассчитав максимальное выходное значение. Я понимаю, что используя следующий скрипт, я могу вывести количество пикселей для определенного доминирующего цвета, но как я могу вывести имя доминирующего цвета, убив максимальное количество пикселей?

zz=max(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11)
print(zz)

Ответы [ 3 ]

2 голосов
/ 06 марта 2020

Вы можете составить список цветов с тем же индексом, что и ваши переменные, т. Е.

colors = ["Red","Blue",..."Brown"]

Затем используйте np.argmax, чтобы найти индекс с наибольшим числом пикселей

zz=np.argmax([x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11])

Наконец, используйте zz в качестве индекса в вашем списке цветов

print(colors[zz])
1 голос
/ 06 марта 2020

Заменить дискретные переменные одним списком:

masks = [ frame, red_mask, blue_mask, green_mask, orange_mask, yellow_mask, cyan_mask, black_mask, gray_mask, white_mask, violet_mask, brown_mask ]
labels = [ 'total number of pixels in image', 'Red is ', 'Blue is', 'Green is', 'Orange is', 'Yellow is', 'Cyan is', 'Black is', 'Gray is', 'White is', 'Violet is', 'Brown is' ]

counts = [ np.count_nonzero(i) for i in masks ]
for c, l in zip(counts, labels):
  print(l, c)
print("Max is", colors[np.argmax(counts)])
1 голос
/ 06 марта 2020

Вы можете использовать словарь для хранения цвета в качестве ключа и числа в качестве значения

dict = {} # creates an empty dictionary
dict["Red"] = np.count_nonzero(red_mask)
# so on for the rest of the color

Затем вы можете получить цвет с максимальным числом с помощью для l oop или с помощью лямбда-функции , спасибо за комментарий

color = max(dict.keys(), key=(lambda key: dict[key])) 
print(color)
max = 0
color = ""
for key, value in dict.items():
    if(max < value):
        max = value
        color = key
print(color)
...