用python做个简单视频播放器,初识tkinter、cv2、PIL图像模块的使用今天通过用python做个简单的视频播
今天通过用python做个简单的视频播放器,做为初步入门tkinter、cv2、PIL模块的入门练习。
一 程序要求
使用python中的tkinter窗口,制作一个视频播放软件。
二 播放窗口
1 导入tkinter模块
从tkinter模块中导入所有模块
from tkinter import *
2 建立窗口和标题
# 创建Tkinter窗口
root = Tk()
root.title('视频播放器')
标题即程序窗口左上角显示的文字。
3 创建播放用的标签
# 创建一个标签用来显示视频帧
label = Label(root)
label.pack()
1 Label
为创建标签的函数,创建的位置为root
窗口。 下图这种不可修改文字的控件就是标签
(本图为IDLE中设置代码字体大小的窗口)
2 pack
函数的功能是将label
显示在窗口上,没有这一行,label
标签相当于隐藏了。
4 窗口持续显示
程序的最后一行写入
root.mainloop()
用于持续显示root
窗口,
不然程序一瞬间运行完了,咱们只能看到窗口一闪而过......有时快的你甚至看到不闪过。
5 运行效果
此时,程序的运行效果是这样的
三 加载并播放视频
1 加载视频
# 创建视频捕捉对象
cap = cv2.VideoCapture('32.mp4')
32.mp4
是视频的名称,
这个视频要和程序放在同一个文件夹下,
如果不放在一个文件夹下,就要写明详细的绝对路径,如:
D:\video\32.mp4
2 建立一个播放视频的函数
自定义函数 update_frame
def update_frame():
3 读取下一帧
ret, frame = cap.read()
用read读取图像下一帧的内容,会返回两个值,分别赋值给ret
、frame
ret
的值为True
或False
,表示有没有读取到下一帧图像。
frame
的值为图像的数据数组
4 更改颜色格式
# 将BGR颜色的OpenCV帧转换为RGB颜色
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
第3步frame
的图片颜色格式为BRG
,此处将其改为tkinter
能够识别的RGB
格式。
cv2.COLOR_BGR2RGB
是一个常量,直接这么用就行
5 转换图像
# 将frame图像数据转为图像
im = Image.fromarray(frame)
# 将图像进一步转为tkinter可识别的图像
img = ImageTk.PhotoImage(image=im)
6 显示图像
# 给label自定义一个属性,避免img数据被python将垃圾回收了
label.imgtk = img
# 让label控件加载图片
label.config(image=img)
7 实现视频播放效果
# 每隔10ms更新一次帧
root.after(10, update_frame)
让本窗口在10ms后,再加载一下本函数,实现图像的加载刷新
四 Python视频播放器源代码
import cv2
from tkinter import *
from PIL import Image, ImageTk
# 更新帧的函数
def update_frame():
ret, frame = cap.read()
if ret:
# 将BGR颜色的OpenCV帧转换为RGB颜色
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 将OpenCV图像转换为Pillow图像,然后转换为PhotoImage
im = Image.fromarray(frame)
img = ImageTk.PhotoImage(image=im)
# 显示图像
label.imgtk = img
label.config(image=img)
# 每隔10ms更新一次帧
root.after(10, update_frame)
else:
# 如果视频结束,重新设置视频读取的起始位置
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
update_frame() # 重新开始视频播放
# 如果视频结束,释放捕捉对象
# 下面这行用于 播放完就停止
# cap.release()
# 创建Tkinter窗口
root = Tk()
root.title('视频播放器')
# 创建一个标签用来显示视频帧
label = Label(root)
label.pack()
# 创建视频捕捉对象
cap = cv2.VideoCapture('32.mp4') # 替换为你的视频文件路径
# 开始更新帧
update_frame()
# 运行应用
root.mainloop()
以下就是用python做简单的视频播放器的全部过程解析,做为初步入门tkinter、cv2、PIL模块的入门练习可试着做一下,看不太懂没关系,先自己动手做一下
本文结束
如有疑问,请直接留言!必回! 如有帮助,请点赞转发!感谢!
关注Python入门速学, 带你实战快速学Python
本文使用 markdown.com.cn 排版
转载自:https://juejin.cn/post/7360285681237835817