import cv2
import numpy as np
import random
import string
import tkinter as tk
from tkinter import messagebox
创建一个窗口
cv2.namedWindow(‘frame’)
尝试不同的视频源参数
cap = cv2.VideoCapture(0)
标志位,用于判断是否正在录制
recording = False
生成随机文件名
def generate_random_filename():
letters_and_digits = string.ascii_letters + string.digits
return ‘’.join(random.choice(letters_and_digits) for _ in range(10))
定义拍照函数
def take_photo():
ret, frame = cap.read()
if ret:
random_filename = generate_random_filename() + ‘.jpg’
cv2.imwrite(random_filename, frame)
messagebox.showinfo(“拍照成功”, f"照片已保存为 {random_filename}")
定义录制视频函数
def start_stop_recording():
global recording
global out
recording = not recording
if recording:
random_video_filename = generate_random_filename() + ‘.avi’
fourcc = cv2.VideoWriter_fourcc(*‘XVID’)
out = cv2.VideoWriter(random_video_filename, fourcc, 20.0, (640, 480))
messagebox.showinfo(“录制开始”, f"开始录制视频,保存为 {random_video_filename}")
else:
if out is not None:
out.release()
out = None
messagebox.showinfo(“录制停止”, “停止录制视频”)
def close_program():
if out is not None:
out.release()
cap.release()
root.destroy()
root = tk.Tk()
root.title(“摄像头拍照录像”)
设置窗口大小为 400x300,并将其定位在屏幕左上角(100,100)的位置
root.geometry(“400x300+100+100”)
创建拍照按钮,并设置其大小和位置
photo_button = tk.Button(root, text=“拍照”, command=take_photo)
photo_button.place(x=50, y=50, width=100, height=30)
创建录像按钮,并设置其大小和位置
record_button = tk.Button(root, text=“开始/停止录像”, command=start_stop_recording)
record_button.place(x=50, y=100, width=150, height=30)
创建退出按钮,并设置其大小和位置
quit_button = tk.Button(root, text=“退出”, command=close_program)
quit_button.place(x=50, y=150, width=80, height=30)
if not cap.isOpened():
messagebox.showerror(“错误”, “无法打开摄像头”)
else:
while True:
ret, frame = cap.read()
if not ret:
print(“无法获取帧”)
break
cv2.imshow(‘frame’, frame)
root.update()
if recording and out is not None:
out.write(frame)
cap.release()
cv2.destroyAllWindows()