只有大小为1的数组才能转换为Python标量

只有大小为1的数组才能转换为Python标量,python,python-3.x,numpy,matplotlib,opencv3.0,Python,Python 3.x,Numpy,Matplotlib,Opencv3.0,我试着练习python图像像素颜色直方图 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('image.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) hist = cv2.calcHist([gray], [0], None, [256], [0, 256]) plt.bar(range(1,257), hist)

我试着练习python图像像素颜色直方图

import cv2
import numpy as np
import matplotlib.pyplot as plt


img = cv2.imread('image.jpg')


gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)


hist = cv2.calcHist([gray], [0], None, [256], [0, 256])


plt.bar(range(1,257), hist)
plt.show()
它给出了一个错误

Traceback (most recent call last):
  File "C:/Users/jmu/Desktop/123.py", line 15, in <module>
    plt.bar(range(1,257), hist)
  File "C:\Users\jmu\AppData\Local\Programs\Python\Python37-32\lib\site-packages\matplotlib\pyplot.py", line 2457, in bar
    **({"data": data} if data is not None else {}), **kwargs)
  File "C:\Users\jmu\AppData\Local\Programs\Python\Python37-32\lib\site-packages\matplotlib\__init__.py", line 1810, in inner
    return func(ax, *args, **kwargs)
  File "C:\Users\jmu\AppData\Local\Programs\Python\Python37-32\lib\site-packages\matplotlib\axes\_axes.py", line 2296, in bar
    label='_nolegend_',
  File "C:\Users\jmu\AppData\Local\Programs\Python\Python37-32\lib\site-packages\matplotlib\patches.py", line 658, in __init__
    Patch.__init__(self, **kwargs)
  File "C:\Users\jmu\AppData\Local\Programs\Python\Python37-32\lib\site-packages\matplotlib\patches.py", line 87, in __init__
    self.set_linewidth(linewidth)
  File "C:\Users\jmu\AppData\Local\Programs\Python\Python37-32\lib\site-packages\matplotlib\patches.py", line 348, in set_linewidth
    self._linewidth = float(w)
TypeError: only size-1 arrays can be converted to Python scalars
回溯(最近一次呼叫最后一次):
文件“C:/Users/jmu/Desktop/123.py”,第15行,在
plt.bar(范围(1257),历史)
文件“C:\Users\jmu\AppData\Local\Programs\Python\Python37-32\lib\site packages\matplotlib\pyplot.py”,第2457行,在条形图中
**({“数据”:数据}如果数据不是其他{}),**kwargs)
文件“C:\Users\jmu\AppData\Local\Programs\Python\Python37-32\lib\site packages\matplotlib\\uuuu init\uuuu.py”,第1810行,在内部
返回函数(ax,*args,**kwargs)
文件“C:\Users\jmu\AppData\Local\Programs\Python\Python37-32\lib\site packages\matplotlib\axes\\u axes.py”,第2296行,在条形图中
标签=''无标签'',
文件“C:\Users\jmu\AppData\Local\Programs\Python\Python37-32\lib\site packages\matplotlib\patches.py”,第658行,在uu init中__
修补程序。_uu初始化(self,**kwargs)
文件“C:\Users\jmu\AppData\Local\Programs\Python\Python37-32\lib\site packages\matplotlib\patches.py”,第87行,在uu init中__
自设置线宽(线宽)
文件“C:\Users\jmu\AppData\Local\Programs\Python\Python37-32\lib\site packages\matplotlib\patches.py”,第348行,在set\u linewidth中
自身线宽=浮动(w)
TypeError:只有大小为1的数组才能转换为Python标量
我怎样才能修好它

plt.bar(range(1,257), hist.reshape(256))
或者,如果你想避免硬编码的数字

plt.bar(range(len(hist)), hist.reshape(-1))
酒吧的签名是

matplotlib.pyplot.bar(x,高度,宽度=0.8,底部=None,*,align='center',data=None,**kwargs)

高度:标量或标量序列

因此,将你的身高重塑为一个序列

或者,如果你想避免硬编码的数字

plt.bar(range(len(hist)), hist.reshape(-1))
酒吧的签名是

matplotlib.pyplot.bar(x,高度,宽度=0.8,底部=None,*,align='center',data=None,**kwargs)

高度:标量或标量序列

因此,将你的身高重塑为一个序列