在tkinter上显示视频可以通过以下步骤实现:
import cv2
import tkinter as tk
from PIL import Image, ImageTk
window = tk.Tk()
canvas = tk.Canvas(window, width=640, height=480)
canvas.pack()
def show_frame():
ret, frame = cap.read() # 读取视频帧
if ret:
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 转换颜色空间
image = Image.fromarray(frame) # 创建PIL图像对象
photo = ImageTk.PhotoImage(image) # 创建tkinter图像对象
canvas.create_image(0, 0, image=photo, anchor=tk.NW) # 在画布上显示图像
window.after(10, show_frame) # 每10毫秒更新一次图像
else:
cap.release() # 释放视频资源
cap = cv2.VideoCapture('video.mp4') # 打开视频文件
# cap = cv2.VideoCapture(0) # 启动摄像头
show_frame()
完整的代码示例:
import cv2
import tkinter as tk
from PIL import Image, ImageTk
window = tk.Tk()
canvas = tk.Canvas(window, width=640, height=480)
canvas.pack()
def show_frame():
ret, frame = cap.read()
if ret:
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
image = Image.fromarray(frame)
photo = ImageTk.PhotoImage(image)
canvas.create_image(0, 0, image=photo, anchor=tk.NW)
window.after(10, show_frame)
else:
cap.release()
cap = cv2.VideoCapture('video.mp4')
# cap = cv2.VideoCapture(0)
show_frame()
window.mainloop()
这段代码使用OpenCV库读取视频帧,并使用PIL和tkinter库在画布上显示图像。可以通过修改cap = cv2.VideoCapture('video.mp4')
这一行来打开不同的视频文件,或者使用cap = cv2.VideoCapture(0)
来启动摄像头。每10毫秒更新一次图像,直到视频播放完毕。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云