Я собираюсь предположить, что вам нужно найти наиболее распространенный элемент, который, как упоминал Крис Луенго, называется режимом.Я также собираюсь предположить, что битовая глубина каналов составляет 8 бит (значение от 0 до 255, т.е. по модулю 256).
Вот подход, независимый от реализации:
Цель состоит в том, чтобы поддерживать количество всех типов пикселей, с которыми встречаются.Для этого имеет смысл использовать словарь, который будет иметь вид {pixel_value : count}
.
Как только этот словарь заполнен, мы можем найти пиксель с наибольшим числом.
Теперь,«пиксели» не могут быть хешируемыми и, следовательно, не могут быть сохранены в словаре напрямую.Нам нужен способ присвоить целое число (которое я буду называть pixel_value) каждому уникальному пикселю, т. Е. Вы должны иметь возможность преобразовать значение pixel_value <-> RGB пикселя
ThisФункция преобразует значения RGB в целое число в диапазоне от 0 до 16 777 215:
def get_pixel_value(pixel):
return pixel.red + 256*pixel.green + 256*256*pixel.blue
и преобразует значение pixel_value обратно в значения RGB:
def get_rgb_values(pixel_value):
red = pixel_value%256
pixel_value //= 256
green = pixel_value%256
pixel_value //= 256
blue = pixel_value
return [red,green,blue]
Эта функция может найти наиболее частый пиксельв изображении:
def find_most_common_pixel(image):
histogram = {} #Dictionary keeps count of different kinds of pixels in image
for pixel in image:
pixel_val = get_pixel_value(pixel)
if pixel_val in histogram:
histogram[pixel_val] += 1 #Increment count
else:
histogram[pixel_val] = 1 #pixel_val encountered for the first time
mode_pixel_val = max(histogram, key = histogram.get) #Find pixel_val whose count is maximum
return get_rgb_values(mode_pixel_val) #Returna a list containing RGB Value of the median pixel
Если вы хотите найти самый частый пиксель в наборе изображений, просто добавьте еще один цикл for image in image_set
и заполните словарь для всех значений pixel_values во всех изображениях.