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]) #plt.show() return plt使用 PIL 库将 Matplotlib 绘图对象转换为 Tkinter 图像对象
时间: 2024-03-17 19:41:45 浏览: 89
可以使用PIL库中的ImageTk模块,具体实现步骤如下:
1. 将Matplotlib绘图对象转化为PIL图像对象,可以使用FigureCanvasTkAgg类中的print_figure方法,将图像输出为二进制流
2. 使用PIL库的Image模块打开二进制流,得到PIL图像对象
3. 使用PIL库的ImageTk模块将PIL图像对象转换为Tkinter图像对象
下面是示例代码:
```python
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from PIL import Image, ImageTk
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=your_window)
canvas.draw()
# 将Matplotlib绘图对象输出为二进制流
buf = canvas.buffer_rgba()
# 将二进制流转换为PIL图像对象
img = Image.frombytes('RGBA', canvas.get_width_height(), buf)
# 将PIL图像对象转换为Tkinter图像对象
tk_img = ImageTk.PhotoImage(img)
return tk_img
```
其中,your_window是Tkinter窗口对象。在函数返回的Tkinter图像对象使用完毕后,需要将其保存到全局变量或实例变量中,否则会出现图像无法显示的问题。
阅读全文