Python 实时显示摄像头,点击按钮保存当前摄像头图片

效果图:

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 ,欢迎沟通讨论
部分文档为做项目过程中的源代码,可能没有注释,有疑问欢迎私信沟通

#电子爱好者       #电子专业       #熟悉开关电源原理和测试       #从事硬件自动测试开发

你可以使用Python中的OpenCV库来打开摄像头,并使用Tkinter库创建一个GUI界面,通过按钮实现拍照。 以下是一个简单的示例代码: ```python import cv2 import tkinter as tk from PIL import Image, ImageTk # 打开摄像头 cap = cv2.VideoCapture(0) # 创建GUI界面 root = tk.Tk() # 定义拍照函数 def take_picture(): ret, frame = cap.read() # 读取摄像头数据 cv2.imwrite("picture.jpg", frame) # 保存图片 img = Image.open("picture.jpg") # 打开图片 img = img.resize((400, 300), Image.ANTIALIAS) # 调整图片大小 photo = ImageTk.PhotoImage(img) # 转换为Tkinter可用的图片格式 label.configure(image=photo) # 更新Label显示图片 label.image = photo # 创建按钮 button = tk.Button(root, text="拍照", command=take_picture) button.pack() # 创建Label显示摄像头数据 label = tk.Label(root) label.pack() # 循环更新GUI界面 while True: ret, frame = cap.read() # 读取摄像头数据 cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA) # 转换颜色格式 img = Image.fromarray(cv2image) # 转换为PIL可用的图片格式 img = img.resize((400, 300), Image.ANTIALIAS) # 调整图片大小 photo = ImageTk.PhotoImage(img) # 转换为Tkinter可用的图片格式 label.configure(image=photo) # 更新Label显示图片 label.image = photo root.update() # 更新GUI界面 # 释放摄像头资源 cap.release() # 关闭GUI界面 root.mainloop() ``` 这个代码会打开摄像头,并在GUI界面上显示摄像头实时画面。当点击“拍照”按钮时,会保存当前画面为一张图片,并在GUI界面上显示这张图片。你可以按照自己的需要修改代码,例如更改图片保存路径、更改图片大小等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QQ546475772

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值