Я пытаюсь придумать алгоритм, чтобы дать изображениям оценку количества зеленого, которое они содержат, путем перебора пикселей с помощью PIL.До сих пор я придумал несколько разных методов, но все они кажутся ошибочными.
Первый суммирует все значения g в rgb и делит его, но в сумме все 3 цвета.
def percent_green(img_file):
red = 0
green = 0
blue = 0
img = Image.open(img_file)
pixels = img.load()
width, height = img.size
for x in range(width):
for y in range(height):
rgb = pixels[x, y]
red += rgb[0]
green += rgb[1]
blue += rgb[2]
percent = green / (red + blue + green)
return percent * 100
Этот метод позволяет ранжировать изображения по тому, насколько они зеленые, но, например, изображение, состоящее только из rgb (100, 200, 100), получило бы только 50%, несмотря на то, что оно очень зеленое.
Другойметод, о котором я подумал - просто определить, какой процент пикселей содержит больше зеленого, чем красного или синего.
def percent_green(img_file):
img = Image.open(img_file)
pixels = img.load()
width, height = img.size
total_green = 0
for x in range(width):
for y in range(height):
rgb = pixels[x, y]
if rgb[1] > rgb[0] and rgb[1] > rgb[2]: #if green predominant colour
total_green += 1
percent = total_green /(width * height)
return percent * 100
Проблема с этой опцией состоит в том, что цвета, такие как rgb (0, 1, 0) или rgb (244, 255, 244) будет считаться зеленым.В идеале я хотел бы, чтобы какой-то способ оценил «зеленость» цвета.
Я был бы очень признателен за любые предложения алгоритмов, которые могут дать лучший процент того, насколько зеленое изображение.Любые предложения о том, какой из моих нынешних алгоритмов лучше или как их улучшить, также приветствуются.