使用 opencv 对任意文件夹内图像做批处理。处理的结果存入新文件夹内。 处理前后的图片 5-10 张显示在 tkinter 或、
时间: 2024-03-26 10:35:57 浏览: 17
下面是一个使用OpenCV对任意文件夹内图像进行批处理并将结果保存到新文件夹的示例代码:
```python
import cv2
import os
import tkinter as tk
from tkinter import filedialog
# 打开文件夹选择对话框
def select_folder():
folder_path = filedialog.askdirectory()
process_images(folder_path)
# 处理图像,并将结果保存到新文件夹中
def process_images(folder_path):
# 创建新文件夹
output_folder = os.path.join(folder_path, 'processed')
os.makedirs(output_folder, exist_ok=True)
# 遍历文件夹中的所有图像文件
for filename in os.listdir(folder_path):
if filename.endswith('.jpg') or filename.endswith('.png'):
# 读取图像
image_path = os.path.join(folder_path, filename)
image = cv2.imread(image_path)
# 处理图像
# ...
# 保存结果到新文件夹
output_path = os.path.join(output_folder, filename)
cv2.imwrite(output_path, image)
# 显示处理前后的图片
show_images(folder_path, output_folder)
# 显示处理前后的图片
def show_images(folder_path, output_folder):
# 创建窗口
window = tk.Toplevel()
window.title('Processed Images')
# 显示处理前的图片
for i, filename in enumerate(os.listdir(folder_path)[:5]):
if filename.endswith('.jpg') or filename.endswith('.png'):
image_path = os.path.join(folder_path, filename)
image = cv2.imread(image_path)
image = cv2.resize(image, (200, 200))
img = tk.PhotoImage(data=cv2.imencode('.png', image)[1].tobytes())
label = tk.Label(window, image=img)
label.image = img
label.grid(row=0, column=i)
# 显示处理后的图片
for i, filename in enumerate(os.listdir(output_folder)[:5]):
if filename.endswith('.jpg') or filename.endswith('.png'):
image_path = os.path.join(output_folder, filename)
image = cv2.imread(image_path)
image = cv2.resize(image, (200, 200))
img = tk.PhotoImage(data=cv2.imencode('.png', image)[1].tobytes())
label = tk.Label(window, image=img)
label.image = img
label.grid(row=1, column=i)
# 创建主窗口
root = tk.Tk()
# 添加按钮
button = tk.Button(root, text='Select Folder', command=select_folder)
button.pack()
# 运行主程序
root.mainloop()
```
这个代码中,首先创建一个窗口,包含一个按钮。点击按钮会打开文件夹选择对话框,选择文件夹后程序开始处理图像,并将结果保存到新文件夹中。处理前后的前5张图片会显示在新的窗口中。