2024-1-13 17:23:31 [显示全部楼层]
1717浏览
查看: 1717|回复: 0

[项目分享] Python 通过tkinter实现图片风格的转换

[复制链接]
本帖最后由 Vico 于 2024-1-13 17:30 编辑

本应用功能:
  • 使用Python做一个图片风格处理的应用
  • tkinter做软件界面,
  • 有按钮打开本地的图片
  • 另外有一个按钮,将图片的风格改成黑白图
  • 显示在软件中,与原图做对比


效果如下:
Python 通过tkinter实现图片风格的转换图1


代码如下:
  1. import tkinter as tk
  2. from tkinter import filedialog
  3. from PIL import Image, ImageTk
  4. # 打开图像文件
  5. def open_image():
  6.     global img, img_display, img_styled, img_display_styled
  7.     file_path = filedialog.askopenfilename()  # 打开文件对话框
  8.     if file_path:
  9.         img = Image.open(file_path)
  10.         img = resize_image(img)
  11.         img_display = ImageTk.PhotoImage(img)
  12.         panel_original.config(image=img_display)  # 在原始图像面板上显示图像
  13.         # 当打开新图像时清除已应用风格的图像面板
  14.         panel_styled.config(image='')
  15. # 应用风格转换
  16. def apply_style():
  17.     global img, img_styled, img_display_styled
  18.     if img is None:
  19.         return
  20.     img_styled = style_transfer(img)
  21.     img_display_styled = ImageTk.PhotoImage(img_styled)
  22.     panel_styled.config(image=img_display_styled)  # 在应用风格的图像面板上显示图像
  23. # 风格转换函数
  24. def style_transfer(image):
  25.     # 应用预定义风格到图像
  26.     # 这是实际风格转换函数的占位符
  27.     return image.convert("L")  # 示例:将图像转换为灰度
  28. # 调整图像大小
  29. def resize_image(image):
  30.     original_width, original_height = image.size
  31.     aspect_ratio = original_height / original_width  # 宽高比
  32.     new_height = int(400 * aspect_ratio)  # 按照宽高比调整新高度
  33.     new_size = (400, new_height)
  34.     # 使用 Image.Resampling.LANCZOS 以获得更高质量的缩小图像
  35.     return image.resize(new_size, Image.Resampling.LANCZOS)
  36. # 创建主窗口
  37. root = tk.Tk()
  38. root.title("图像风格转换器")  # 窗口标题
  39. root.geometry("1000x800")  # 设置窗口大小为 1000x800
  40. # 初始化全局变量用于图像及其显示
  41. img = None
  42. img_styled = None
  43. # 创建面板来显示原始图像和已应用风格的图像
  44. panel_original = tk.Label(root, borderwidth=2, relief="groove")
  45. panel_original.pack(side="left", padx=10, pady=10, fill="both", expand=True)
  46. panel_styled = tk.Label(root, borderwidth=2, relief="groove")
  47. panel_styled.pack(side="right", padx=10, pady=10, fill="both", expand=True)
  48. # 创建一个按钮用于打开图像
  49. btn_open = tk.Button(root, text="打开图像", command=open_image)
  50. btn_open.pack(side="top", pady=5)
  51. # 创建一个按钮用于应用风格转换
  52. btn_style = tk.Button(root, text="应用风格", command=apply_style)
  53. btn_style.pack(side="top", pady=5)
  54. # 运行应用程序
  55. root.mainloop()
复制代码


其中风格可以定义如下:
  1. 在Pillow库中,image.convert() 方法通常用于改变图像的模式,而不是直接应用艺术风格。例如,image.convert("L") 将彩色图像转换为灰度图像。下面列出了一些常用的模式转换参数:
  2. "L":将图像转换为灰度(8位像素,黑白)。
  3. "RGB":将图像转换为真彩色(3x8位像素,红绿蓝)。
  4. "RGBA":将图像转换为真彩色带透明度掩膜(4x8位像素,红绿蓝透明度)。
  5. "CMYK":将图像转换为分色印刷颜色模式(4x8位像素,青色品红黄色黑色)。
  6. "1":将图像转换为二值图像(1位像素,黑白,使用阈值)
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail