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() 改为连续拍照,图片以此命名为1,2,3
时间: 2024-04-02 14:35:26 浏览: 18
您可以通过以下代码实现连续拍照,并以1、2、3等命名图片:
```
import cv2
import tkinter as tk
from PIL import Image, ImageTk
# 打开摄像头
cap = cv2.VideoCapture(0)
# 创建GUI界面
root = tk.Tk()
# 定义拍照函数
def take_picture():
global count
ret, frame = cap.read() # 读取摄像头数据
cv2.imwrite(str(count) + ".jpg", frame) # 保存图片
count += 1
if count > 3:
count = 1
img = Image.open(str(count) + ".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界面
count = 1
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()
```
在该代码中,我们添加了一个全局变量`count`,用于记录当前拍照的序号。在拍照时,我们将图片以序号命名并保存,然后更新`count`的值,以便下一次拍照使用。同时,我们将显示的图片改为从文件中读取,以便实现连续拍照。