tkinter 实现选择路径(有解决中文路径、中文档名问题)打开显示照片,可选择 cv2.COLOR_ 模式并用 for loop 计算照片直方图 histogram

import cv2
import numpy as np
from tkinter import filedialog
import tkinter as tk
from PIL import ImageTk, Image
from matplotlib import pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
root = tk.Tk()
radioValue = tk.IntVar()
mediaFrame = tk.Frame(root).pack()
"""
创建 tkinker label
"""
media = tk.Label(mediaFrame)
media.pack()
fig = plt.figure()
"""
创建初始画布
"""
f_plot =fig.add_subplot(111)
"""
创建 histogram 画布
"""
canva = FigureCanvasTkAgg(fig,root)
canva.get_tk_widget().pack(side='right')
def cv_imread(filePath):
    cv_img=cv2.imdecode(np.fromfile(filePath,dtype=np.uint8),-1)
    return cv_img

def validate():
    value = radioValue.get()
    global mode
    '''
    1 cv2.COLOR_BGR2RGB
    2 cv2.COLOR_BGR2HSV
    3 cv2.COLOR_BGR2HLS
    4 cv2.COLOR_BGR2Lab
    5 cv2.COLOR_BGR2Luv
    6 cv2.COLOR_BGR2YCrCb
    7 cv2.COLOR_BGR2XYZ
    '''
    if (value == 1):
        mode = cv2.COLOR_BGR2RGB
    if( value == 2):
        mode = cv2.COLOR_BGR2HSV
    if( value == 3):
        mode = cv2.COLOR_BGR2HLS
    if( value == 4):
        mode = cv2.COLOR_BGR2Lab
    if( value == 5):
        mode = cv2.COLOR_BGR2Luv
    if( value == 6):
        mode = cv2.COLOR_BGR2YCrCb
    if( value == 7):
        mode = cv2.COLOR_BGR2XYZ
def oas():
    plt.cla()
    global mode
    sfname = filedialog.askopenfilename(title='选择',
                                        filetypes=[
                                            ('All Files','*'),
                                            ("jpeg files","*.jpg"),
                                            ("png files","*.png"),
                                            ("gif files","*.gif")])
    
    cv2image = cv2.cvtColor(cv2.resize(cv_imread(sfname),(500,250)),mode)
    size = cv2image.shape
    (high,width,path) = size
    y = np.zeros((256))
    for i in range(0,high):
      for j in range(0,width):
         y[cv2image[i,j]] += 1
    x = np.arange(0,256)
    plt.bar(x,y,color="gray",align="center")
    img = Image.fromarray(cv2image)
    imgtk = ImageTk.PhotoImage(image=img)
    media.imgtk = imgtk
    media.configure(image=imgtk)
    canva.draw()

r1 = tk.Radiobutton(root,text = " bgr 、 rgb 互转模式",variable=radioValue, value=1,command = validate).pack()
r2 = tk.Radiobutton(root,text = " hsv ",variable=radioValue, value=2,command = validate).pack()
r3 = tk.Radiobutton(root,text = " hls ",variable=radioValue, value=3,command = validate).pack()
r4 = tk.Radiobutton(root,text = " lab ",variable=radioValue, value=4,command = validate).pack()
r5 = tk.Radiobutton(root,text = " luv ",variable=radioValue, value=5,command = validate).pack()
r6 = tk.Radiobutton(root,text = " ycrcb ",variable=radioValue, value=6,command = validate).pack()
r7 = tk.Radiobutton(root,text = " xyz ",variable=radioValue, value=7,command = validate).pack()
b1 = tk.Button(root, text="打开",command = oas).pack()
root.mainloop()

<<:  Python海关三旬汇率 - Python练习题三

>>:  tkinter 实现台湾类股抽签程序

如何找到想要的工作2-稻穗问题

稻穗问题 夕阳西下,麦田沐浴在余晖的彩霞之中。片片的麦田在微风里泛着金浪,金浪的尾端旁有一道崎岖的小...

16. HTTP request methods ( 下 )--- PUT vs. PATCH

延续昨天的文章15. HTTP request methods ( 上 )--- GET vs. P...

Day-7 字串(上)

字串分成两篇上篇主要为字串显示方式,下篇为字串内容撷取。 表示为字串 一对单或双引号里面表示Pyth...

【Day20】 WavenetGan, BidirectionalLSTMGAN, WaveGan 钢琴音乐生成

因为之後想花一点时间分享一下 Transformer 阅读跟实作的经验,所以这篇就没写 Trans...

DAY5 起手式--Nuxt.js(细)说pages(下)

layout 属性 我们可以使用 layout 属性来套用放置於 layouts 的布局。 expo...