NumPy: нужна помощь в определении среднего значения гистограммы

#python #numpy #average

#python #numpy #среднее

Вопрос:

В настоящее время я работаю над проектом обнаружения изображений, и для захвата последнего кадра нашего видеовыхода требуется определенный блок кода. Для получения наилучших результатов мы должны создать гистограмму, которая отображает распределение всех пикселей (что я уже сделал) и усредняет их, чтобы получить уровни окружающего освещения. В настоящее время мой код выглядит следующим образом:

 from PIL import Image
import os
from pylab import *
from PIL import ImageFont
from PIL import ImageDraw


#read image 
image1 = array(Image.open("EE_Design_Chimys.jpg").convert('L'))

#plot image
imshow(image1)
#create a new figure
figure()
#dont use colors
gray()
#show contours with origin upper left corner
contour(image1, origin='image')
axis('equal')
axis('off')
figure()
a = hist(image1.flatten(),128)

#attempt to average out histogram
average(a)

show(a)
  

И когда я запускаю этот код, он выдает сообщение об ошибке следующим образом:

 Traceback (most recent call last):
  File "/Users/Perez/Desktop/Python Stuff/mod_amb_light.py", line 25, in <module>
     average(a)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numpy/lib/function_base.py", line 935, in average
    avg = a.mean(axis)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numpy/core/_methods.py", line 65, in _mean
    ret = umr_sum(arr, axis, dtype, out, keepdims)
ValueError: operands could not be broadcast together with shapes (128,) (129,)
  

Я не уверен, что именно это означает, как даже начать ее решать. Если у кого-нибудь есть какие-либо полезные советы или идеи, пожалуйста, поделитесь своими знаниями! Спасибо.

С уважением, Хайме Перес-младший.

Комментарии:

1. Пожалуйста, покажите полную обратную трассировку в вашем вопросе, а не только в последней строке. Не очевидно, где в вашем коде возникает эта ошибка.

2. a = hist(image1.flatten(),128) выглядит некорректно — plt.hist возвращает три аргумента, только первый из которых содержит количество ячеек гистограммы. На данный момент a это кортеж (bin_counts, bin_edges, patches) , и вы пытаетесь передать все это np.average .

3. @ali_m Я обновил свою обратную трассировку! Кроме того, я думал, что ‘plt.hist’ вернул два аргумента; ‘(array, bin_edges)’? Кроме того, я также не знаком с функцией ‘.flatten ()’. Я довольно новичок в python, и все эти методы погружения иногда бывают ошеломляющими.

4. Звучит так, как будто вы путаете np.histogram plt.hist . Все это хорошо документировано — чтобы просмотреть строки документации, используйте help(<function_name>) в своем интерпретаторе Python (или просто <function_name>? , если вы используете IPython).