#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).