import tkinter as tk
import cv2
# 创建主窗口
root = tk.Tk()
root.title("人脸检测应用")
root.geometry("450x300")
创建一个标签用于显示视频 窗口实例化名称为root
video_label = tk.Label(root,text='lable')
video_label.pack()
def play_video():
file_path = filedialog.askopenfilename(filetypes=[("视频文件", "*.mp4 *.avi *.mkv *.mov")])
cap = cv2.VideoCapture(file_path)
progress_bar = ttk.Progressbar(root, orient="horizontal", length=400, mode="determinate")
progress_bar.pack(side='left')
while True:
ret, frame = cap.read()#ret是一个布尔值 用来判断帧读取是否成功
if not ret:
break
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) #将读取的视频帧从BGR颜色空间转换为RGB颜色空间。这是因为PIL库需要RGB颜色空间。
image = Image.fromarray(frame) #将帧数据转换为PIL图像对象。
photo = ImageTk.PhotoImage(image=image)#将PIL图像对象转换为Tkinter PhotoImage对象,以便在Tkinter标签中显示。
video_label.config(image=photo)#将标签(video_label)的图像配置为当前帧的PhotoImage,从而更新标签上显示的图像。
video_label.image = photo#将标签的image属性设置为当前帧的PhotoImage对象,以确保图像不会被垃圾回收。
root.update()#用于更新Tkinter窗口的显示,以便显示新的视频帧
# 控制帧速率,例如每秒显示 30 帧
time.sleep(1 / 30) # 这里的参数可以调整,以控制帧速率
cap.release()
# 创建一个按钮来触发视频播放
play_button = tk.Button(root, text="播放视频", command=play_video)
play_button.pack()