def channel_hist(image): color = ('b', 'g', 'r') for i, color in enumerate(color): hist = cv2.calcHist([image], [i], None, [256], [0, 256]) plt.plot(hist, color) plt.xlim([0, 256]) fig = plt.gcf() canvas = FigureCanvasTkAgg(fig,master=root2) canvas.draw() #将Matplotlib绘图对象输出为二进制流 buf = canvas.buffer_rgba() img = Image.frombytes('RGBA',canvas.get_width_height(),buf) tk_img = ImageTk.PhotoImage(img) #plt.show() return tk_img
时间: 2024-01-20 16:01:56 浏览: 136
这段代码中的问题很可能是因为 matplotlib 的版本问题。在较新的版本中,`FigureCanvasTkAgg` 类的 `buffer_rgba()` 方法已经被弃用,应该使用 `tostring_rgba()` 方法来替代。
你需要修改代码中的两行,将 `buffer_rgba()` 改为 `tostring_rgba()`。修改后的代码如下所示:
```
def channel_hist(image):
color = ('b', 'g', 'r')
for i, color in enumerate(color):
hist = cv2.calcHist([image], [i], None, [256], [0, 256])
plt.plot(hist, color)
plt.xlim([0, 256])
fig = plt.gcf()
canvas = FigureCanvasTkAgg(fig,master=root2)
canvas.draw()
#将Matplotlib绘图对象输出为二进制流
buf = canvas.tostring_rgba()
img = Image.frombytes('RGBA',canvas.get_width_height(),buf)
tk_img = ImageTk.PhotoImage(img)
#plt.show()
return tk_img
```
请尝试修改代码并重新运行程序,看看是否可以解决问题。
阅读全文