效果图:
import cv2
import tkinter as tk
from PIL import Image, ImageTk
from datetime import datetime
import os
# 声明一个列表来存储所有的图片名称
image_names = []
# 打开摄像头
cap = cv2.VideoCapture(0)
# 创建Tkinter窗口
window = tk.Tk()
window.title("摄像头")
window.geometry("900x600") # 设置窗口的宽度和高度为800x600像素
# 创建显示视频的标签
label = tk.Label(window)
label.place(x=10, y=10, width=640, height=480) # 设置标签的位置和大小
# 创建保存图片名称的标签
label_filename = tk.Label(window)
label_filename.place(x=660, y=10, width=240, height=480) # 设置标签的位置和大小
# 显示图片
def show_frame():
global frame # 将frame声明为全局变量
# 读取摄像头画面
ret, frame = cap.read()
# 获取当前时间
current_time = datetime.now()
# 将时间转换为字符串
time_str = current_time.strftime("%Y%m%d %H:%M:%S")
# 在帧上添加时间文本
cv2.putText(frame, time_str, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2)
# 将OpenCV图像转换为Tkinter图像
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 将颜色通道顺序转换为RGB
image = Image.fromarray(frame_rgb)
image = ImageTk.PhotoImage(image)
# 更新标签中的图像
label.configure(image=image)
label.image = image
# 每隔10毫秒调用一次show_frame函数
label.after(10, show_frame)
# 保存图片
def save_pic():
global image_names
# 获取当前时间
current_time = datetime.now()
# 构建图片名称
image_name = current_time.strftime("%Y%m%d_%H%M%S_%f") + ".jpg"
# 显示文字
image_name_dis = "保存成功: " + image_name
# 构建保存路径
save_folder = "D:\\01project\\save"
os.makedirs(save_folder, exist_ok=True)
save_path = os.path.join(save_folder, image_name)
# 保存当前帧为图片
success = cv2.imwrite(save_path, frame)
# 将新的图片名称添加到列表中
image_names.append(image_name_dis)
# 将所有的图片名称拼接起来,并设置为label_filename标签的文本内容,每个图片名称之间添加换行符
label_filename.config(text="\n".join(image_names))
# 创建保存按钮
button_save = tk.Button(window, text="保存图片", command=save_pic)
button_save.place(x=660, y=530, width=120, height=40) # 设置按钮的位置和大小
# 开始显示视频
show_frame()
# 运行Tkinter事件循环
window.mainloop()
持续更新中... ... 点个关注和收藏哦
Labview、Python、VBA、C、Excel公式、PCB Layout、PIC单片机、Visual Studio(ASP.NET)、SQL Server ,欢迎沟通讨论
部分文档为做项目过程中的源代码,可能没有注释,有疑问欢迎私信沟通#电子爱好者 #电子专业 #熟悉开关电源原理和测试 #从事硬件自动测试开发