使用 opencv 对任意文件夹内图像做批处理。处理的结果存入新文件夹内。 处理前后的图片 5-10 张显示在 tkinter 或 web 界面上
时间: 2024-03-23 18:42:05 浏览: 48
这个任务可以分成两个部分来完成:批量处理图像和将结果显示在 tkinter 或 web 界面上。以下是示例代码:
```python
import os
import cv2
import shutil
from tkinter import *
from PIL import ImageTk, Image
# 定义函数进行图像处理
def process_image(input_path, output_path):
# 读取图像
img = cv2.imread(input_path)
# 进行图像处理,这里只是简单的将图像缩小一半
img = cv2.resize(img, (0, 0), fx=0.5, fy=0.5)
# 将处理后的图像保存到输出路径
cv2.imwrite(output_path, img)
# 定义函数进行批量处理
def batch_process_images(input_folder, output_folder):
# 如果输出文件夹不存在,则创建它
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 遍历输入文件夹中的所有图像文件
for filename in os.listdir(input_folder):
if filename.endswith(".jpg") or filename.endswith(".png"):
# 构造输入和输出路径
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, filename)
# 进行图像处理
process_image(input_path, output_path)
# 定义函数将图像显示在 tkinter 界面上
def show_images_tkinter(input_folder, output_folder):
# 创建 tkinter 窗口
window = Tk()
window.title("图像处理前后对比")
# 加载图像文件,显示前5张图像
for i, filename in enumerate(os.listdir(input_folder)[:5]):
# 构造输入和输出路径
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, filename)
# 加载图像文件
input_img = Image.open(input_path)
output_img = Image.open(output_path)
# 创建 tkinter 图像对象
input_tk = ImageTk.PhotoImage(input_img)
output_tk = ImageTk.PhotoImage(output_img)
# 在 tkinter 窗口上显示图像
Label(window, image=input_tk).grid(row=i, column=0)
Label(window, image=output_tk).grid(row=i, column=1)
# 运行 tkinter 窗口
window.mainloop()
# 定义函数将图像显示在 web 界面上
def show_images_web(input_folder, output_folder):
# 创建 web 页面
html = "<html><body>"
# 加载图像文件,显示前5张图像
for i, filename in enumerate(os.listdir(input_folder)[:5]):
# 构造输入和输出路径
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, filename)
# 加载图像文件
input_img = Image.open(input_path)
output_img = Image.open(output_path)
# 将图像转成 base64 编码的字符串
input_data = input_img.tobytes()
output_data = output_img.tobytes()
input_str = "data:image/png;base64," + input_data.encode("base64").replace("\n", "")
output_str = "data:image/png;base64," + output_data.encode("base64").replace("\n", "")
# 在 web 页面上显示图像
html += f"<div><img src='{input_str}'/><img src='{output_str}'/></div>"
# 结束 web 页面
html += "</body></html>"
# 将 web 页面保存到文件
with open("output.html", "w") as f:
f.write(html)
# 批量处理图像
batch_process_images("input_folder", "output_folder")
# 将处理前后的图像显示在 tkinter 界面上
show_images_tkinter("input_folder", "output_folder")
# 将处理前后的图像显示在 web 界面上
show_images_web("input_folder", "output_folder")
```
代码中首先定义了 process_image 函数用于进行图像处理,batch_process_images 函数用于批量处理图像,show_images_tkinter 函数用于将处理前后的图像显示在 tkinter 界面上,show_images_web 函数用于将处理前后的图像显示在 web 界面上。
在 batch_process_images 函数中,通过遍历输入文件夹中的所有图像文件,调用 process_image 函数进行图像处理,将处理后的图像保存到输出文件夹中。
在 show_images_tkinter 函数中,通过创建 tkinter 窗口,将处理前后的图像显示在窗口中。
在 show_images_web 函数中,通过将图像转成 base64 编码的字符串,将处理前后的图像显示在 web 页面上,并将 web 页面保存到文件中。
最后,调用批量处理图像和将图像显示在 tkinter 和 web 界面上的函数。
阅读全文