Я пытаюсь рассчитать пропорцию цветов в изображении и вернуть ее как соотношение. У меня есть много изображений «бревен», которые представляют собой вертикальные последовательности цветов, и я хотел бы знать разницу общей площади 1 цвета по сравнению с другим и соотношение 1 цвета по отношению ко всему изображению.
Например, на изображении ниже, если я вычисляю общую площадь, занимаемую синим цветом, и сравниваю ее со всей площадью (синий и коричневый вместе взятые), я получаю соотношение = 69,14. (Я получил это значение, суммируя площадь всех синих прямоугольников и разделить на сумму площадей всех синих и коричневых прямоугольников)
* обратите внимание, что цвета не всегда будут такими, как показано ниже, и я хотел бы иметь возможность использовать более двух цветов, если это возможно (и, возможно, просто указать код RGB цвета, на котором я сосредоточен и хочу отношение этого цвета ко всему).
Обратите внимание, что у меня МНОГО изображений, мне нужно будет запустить это, поэтому было бы полезно перебрать все изображения в папке, если это возможно.
Я собрал код ниже из нескольких примеров, но я запутался в нескольких вещах. Во-первых, я не обязательно хочу преобразовывать изображение в двоичное, если мне это не нужно, а во-вторых, похоже, что я вычисляю количество белых пикселей, а не черных. Не уверен, где я ошибаюсь.
import cv2
import numpy as np
from matplotlib import pyplot as plt
# load image
image = cv2.imread('/Users/Me/Desktop/logtest.png',0)
# plot the binary image
imgplot = plt.imshow(image, "gray")
plt.show()
#Calculate percent of pixels that are black
ret,thresh = cv2.threshold(image,0,230, cv2.THRESH_BINARY)
height, width = image.shape
print ("Height and Width : ",height, width)
size = image.size
print ("Total number of pixels in the image is =", size)
ChosenPix = cv2.countNonZero(image)
print("Total number of black pixels =", count)
Ratio = (ChosenPix/size)*100
print("Ratio of black to total is =", Ratio)