python tkinter显示摄像头
时间: 2023-11-05 22:58:08 浏览: 327
可以使用Python的OpenCV库来获取摄像头的视频流,并使用Tkinter来显示视频流。以下是一个简单的程序示例:
```
import cv2
import tkinter as tk
from PIL import Image, ImageTk
class App:
def __init__(self, window, window_title):
self.window = window
self.window.title(window_title)
self.cap = cv2.VideoCapture(0)
self.canvas = tk.Canvas(window, width = self.cap.get(cv2.CAP_PROP_FRAME_WIDTH), height = self.cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
self.canvas.pack()
self.delay = 15
self.update()
self.window.mainloop()
def update(self):
ret, frame = self.cap.read()
if ret:
self.photo = ImageTk.PhotoImage(image = Image.fromarray(frame))
self.canvas.create_image(0, 0, image = self.photo, anchor = tk.NW)
self.window.after(self.delay, self.update)
App(tk.Tk(), "Tkinter and OpenCV")
```
在这个程序中,我们首先使用`cv2.VideoCapture(0)`来打开默认的摄像头。我们将每个“新”帧读取到一个名为`frame`的变量中。使用Python Imaging Library(PIL),我们将这个帧转换为图像,然后使用`ImageTk.PhotoImage`来创建可以在Tkinter`Canvas`上显示的图像对象。使用`Canvas`的`create_image`方法,我们在屏幕上显示图像。 为了实现连续视频流,我们需要递归地调用`update`函数。 使用`after`方法,我们可以设置每隔15毫秒更新一次帧。
阅读全文