中文路径优化

简介: 中文路径优化

中文路径优化

import cv2
import os
import tkinter as tk
from tkinter import filedialog
from tkinter import messagebox

import numpy as np
from PIL import ImageTk, Image

# 创建一个函数用于打开图片对话框
def open_image_dialog():
    file_path = filedialog.askopenfilename(title="选择图片", filetypes=[("图片文件", "*.jpg;*.jpeg;*.png;*.bmp")])
    if file_path:
        # 使用原始字符串处理路径中的中文字符
        file_path = file_path.encode('utf-8').decode('utf-8')  # 确保路径是UTF-8编码
        print(file_path)

        global original_image, original_filename
        # 尝试读取图像文件
        original_image = cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), cv2.IMREAD_COLOR)

        if original_image is None:
            messagebox.showerror("检查路径:"+file_path)
        else:
            original_filename = os.path.basename(file_path)
            image_label.config(text="已选择图片:" + original_filename)
            display_image(original_image)

# 创建一个函数用于将图片转换为灰度
def convert_to_gray():
    global original_image
    gray_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
    new_filename = original_filename.split('.')[0] + "g." + original_filename.split('.')[1]
    new_file_path = os.path.join(os.path.dirname(original_filename), new_filename)
    cv2.imwrite(new_file_path, gray_image)
    messagebox.showinfo("成功", "图片已转换并保存为:\n" + new_filename)
    display_image(gray_image)

# 创建一个函数用于显示图片
def display_image(image):
    # 将图像转换为 RGB 格式以在 tkinter 上显示
    rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    # 将 NumPy 数组转换为 PIL Image,并调整大小
    img = Image.fromarray(rgb_image)
    img = img.resize((300, 300), Image.ANTIALIAS)
    # 将 PIL Image 转换为 PhotoImage
    photo = ImageTk.PhotoImage(img)
    # 在 tkinter 的 Label 上显示 PhotoImage
    image_label.config(image=photo)
    image_label.image = photo  # 保持对 PhotoImage 的引用

# 创建 tkinter 窗口
root = tk.Tk()
root.title("图片转灰度工具")

# 创建一个 Frame 用于放置按钮
button_frame = tk.Frame(root)
button_frame.pack(pady=10)

# 创建一个 Label 用于显示图片信息
image_label = tk.Label(root, text="请选择图片", font=("Helvetica", 12))
image_label.pack(pady=20)

# 创建一个 Button 用于选择图片,并放置到 Frame 中
choose_button = tk.Button(button_frame, text="选择图片", command=open_image_dialog)
choose_button.pack(side=tk.LEFT, padx=5)

# 创建一个 Button 用于转换图片,并放置到 Frame 中
convert_button = tk.Button(button_frame, text="转换为灰度", command=convert_to_gray)
convert_button.pack(side=tk.LEFT, padx=5)

# 创建一个 Button 用于取消操作,并放置到 Frame 中
cancel_button = tk.Button(button_frame, text="取消", command=root.destroy)
cancel_button.pack(side=tk.LEFT, padx=5)

# 运行 tkinter 主循环
root.mainloop()
目录
相关文章
|
9月前
如何解决vscode中文路径的问题
如何解决vscode中文路径的问题
612 0
|
9月前
|
NoSQL Java Linux
Linux常用命令(文件目录操作、拷贝移动、打包压缩、文本编辑、查找)
Linux常用命令(文件目录操作、拷贝移动、打包压缩、文本编辑、查找)
TortoiseSVN不支持中文路径
TortoiseSVN不支持中文路径
146 0
|
C# C++
GDAL打开中文路径和读写中文字段的问题
版权声明:欢迎评论和转载,转载请注明来源。 https://blog.csdn.net/zy332719794/article/details/40394839 GDAL不同的版本对中文的默认支持不一,有时候默认支持,有时候需要自己去设置。
1792 0
|
6月前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
533 1
|
9月前
|
算法 Python Windows
Python实现文件压缩和解压功能
Python实现文件压缩和解压功能
147 0
|
9月前
|
定位技术 Python
Python对比两个文件夹中子文件夹或文件的差异并查漏补缺
Python对比两个文件夹中子文件夹或文件的差异并查漏补缺
106 1
|
9月前
|
存储 C#
【Untiy 3D】C#中文件夹与读写文件操作详解(附测试代码 超详细)
【Untiy 3D】C#中文件夹与读写文件操作详解(附测试代码 超详细)
83 0
|
存储
水滴文件打包上传报错【解决方法】
水滴文件打包上传报错【解决方法】
95 0
|
缓存 计算机视觉
OpenCv读取中文路径
OpenCv读取中文路径
250 0