Вы можете использовать np.average :
img = cv2.imread('img.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #convert it to RGB channel
plt.imshow(img)
![enter image description here](https://i.stack.imgur.com/nLz0U.png)
Давайте обрежем первые 1000 строк (первые 5строки на вашем изображении белые, поэтому среднее значение будет только 255).
crop_img = img[:1000, :]
plt.imshow(crop_img)
![enter image description here](https://i.stack.imgur.com/7C3pb.png)
Если вы хотите усреднить полное обрезанное изображение (котороевключает в себя 3 канала RGB) используйте:
np.average(crop_img)
> 221.7606454078586
Если вы хотите усреднить по 3 каналам, используйте:
np.average(crop_img, axis = (0,1))
array([219.85728484, 220.16578896, 225.25886241])
Если вы хотите просто усреднить по одному каналу, скажите красный:
np.average(crop_img[:, :, 0]) #replace 0 with 1 for green channel and with 2 for blue channel
219.85728484414187