Кратчайший ответ ( от Руана Б. ):
import cv2
import numpy
myimg = cv2.imread('image.jpg')
avg_color_per_row = numpy.average(myimg, axis=0)
avg_color = numpy.average(avg_color_per_row, axis=0)
print(avg_color)
Результат:
Blue Green Red
[ 197.53434769 217.88439451 209.63799938]
Более расширенный, аналогичный вашему собственному методу: если вы используетеopencv, доступ к пикселю возвращает массив с цветами BGR.
import cv2
import numpy as np
img = cv2.imread('your_image.jpg')
totalBlue = 0
totalGreen = 0
totalRed = 0
totalPixels = 0
for line in img:
for px in line:
totalBlue += px[0]
totalGreen += px[1]
totalRed += px[2]
totalPixels += 1
meanBlue = totalBlue/totalPixels
meanGreen = totalGreen/totalPixels
meanRed = totalRed/totalPixels
Чтобы получить среднее значение серого, вы можете загрузить ваше изображение как черно-белое изображение, используя
img = cv2.imread('your_image.jpg', 0)