python tk界面使用 opencv 对任意文件夹内图像做批处理,并将它们显示到界面上
时间: 2023-09-06 21:10:41 浏览: 127
可以使用 Python 的 Tkinter 模块和 OpenCV 库来实现这个功能。下面是一个简单的示例代码:
```python
import tkinter as tk
import cv2
import os
class ImageBatchProcessingApp(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.select_dir_btn = tk.Button(self, text="Select Directory", command=self.select_dir)
self.select_dir_btn.pack()
self.process_btn = tk.Button(self, text="Process Images", command=self.process_images)
self.process_btn.pack()
self.quit_btn = tk.Button(self, text="Quit", command=self.master.destroy)
self.quit_btn.pack()
self.image_listbox = tk.Listbox(self)
self.image_listbox.pack()
def select_dir(self):
self.dir_path = tk.filedialog.askdirectory()
self.image_listbox.delete(0, tk.END)
for filename in os.listdir(self.dir_path):
if filename.endswith(".jpg") or filename.endswith(".png"):
self.image_listbox.insert(tk.END, filename)
def process_images(self):
for filename in self.image_listbox.get(0, tk.END):
image_path = os.path.join(self.dir_path, filename)
img = cv2.imread(image_path)
# 在这里做批处理
# ...
# 显示图片到界面上
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = Image.fromarray(img)
img = ImageTk.PhotoImage(img)
self.image_listbox.itemconfig(self.image_listbox.get(0, tk.END).index(filename), image=img)
root = tk.Tk()
app = ImageBatchProcessingApp(master=root)
app.mainloop()
```
在这个示例代码中,我们创建了一个名为 `ImageBatchProcessingApp` 的 Tkinter 应用程序,该应用程序包含三个按钮和一个列表框。单击 `Select Directory` 按钮可以选择要批处理的图像所在的文件夹,并将文件夹中的所有图像文件名显示在列表框中。单击 `Process Images` 按钮可以对列表框中选定的所有图像进行批处理,并将处理后的图像显示在列表框中的对应项中。
要实现批处理功能,你需要在 `process_images` 方法中添加你的代码。例如,你可以使用 OpenCV 来对图像进行缩放、裁剪、旋转、滤波等操作。在将处理后的图像显示到界面上时,我们需要将 OpenCV 的 BGR 格式转换为 RGB 格式,并使用 PIL 和 Tkinter 提供的 `Image` 和 `ImageTk` 类将其转换为可显示的图像。
阅读全文