Python 通过tkinter实现图片风格的转换
本帖最后由 Vico 于 2024-1-13 17:30 编辑本应用功能:
[*]使用Python做一个图片风格处理的应用
[*]tkinter做软件界面,
[*]有按钮打开本地的图片
[*]另外有一个按钮,将图片的风格改成黑白图
[*]显示在软件中,与原图做对比
效果如下:
代码如下:
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
# 打开图像文件
def open_image():
global img, img_display, img_styled, img_display_styled
file_path = filedialog.askopenfilename()# 打开文件对话框
if file_path:
img = Image.open(file_path)
img = resize_image(img)
img_display = ImageTk.PhotoImage(img)
panel_original.config(image=img_display)# 在原始图像面板上显示图像
# 当打开新图像时清除已应用风格的图像面板
panel_styled.config(image='')
# 应用风格转换
def apply_style():
global img, img_styled, img_display_styled
if img is None:
return
img_styled = style_transfer(img)
img_display_styled = ImageTk.PhotoImage(img_styled)
panel_styled.config(image=img_display_styled)# 在应用风格的图像面板上显示图像
# 风格转换函数
def style_transfer(image):
# 应用预定义风格到图像
# 这是实际风格转换函数的占位符
return image.convert("L")# 示例:将图像转换为灰度
# 调整图像大小
def resize_image(image):
original_width, original_height = image.size
aspect_ratio = original_height / original_width# 宽高比
new_height = int(400 * aspect_ratio)# 按照宽高比调整新高度
new_size = (400, new_height)
# 使用 Image.Resampling.LANCZOS 以获得更高质量的缩小图像
return image.resize(new_size, Image.Resampling.LANCZOS)
# 创建主窗口
root = tk.Tk()
root.title("图像风格转换器")# 窗口标题
root.geometry("1000x800")# 设置窗口大小为 1000x800
# 初始化全局变量用于图像及其显示
img = None
img_styled = None
# 创建面板来显示原始图像和已应用风格的图像
panel_original = tk.Label(root, borderwidth=2, relief="groove")
panel_original.pack(side="left", padx=10, pady=10, fill="both", expand=True)
panel_styled = tk.Label(root, borderwidth=2, relief="groove")
panel_styled.pack(side="right", padx=10, pady=10, fill="both", expand=True)
# 创建一个按钮用于打开图像
btn_open = tk.Button(root, text="打开图像", command=open_image)
btn_open.pack(side="top", pady=5)
# 创建一个按钮用于应用风格转换
btn_style = tk.Button(root, text="应用风格", command=apply_style)
btn_style.pack(side="top", pady=5)
# 运行应用程序
root.mainloop()
其中风格可以定义如下:
在Pillow库中,image.convert() 方法通常用于改变图像的模式,而不是直接应用艺术风格。例如,image.convert("L") 将彩色图像转换为灰度图像。下面列出了一些常用的模式转换参数:
"L":将图像转换为灰度(8位像素,黑白)。
"RGB":将图像转换为真彩色(3x8位像素,红绿蓝)。
"RGBA":将图像转换为真彩色带透明度掩膜(4x8位像素,红绿蓝透明度)。
"CMYK":将图像转换为分色印刷颜色模式(4x8位像素,青色品红黄色黑色)。
"1":将图像转换为二值图像(1位像素,黑白,使用阈值)
页:
[1]