tk多个画布中其中一个显示摄像头
时间: 2023-06-12 21:08:28 浏览: 102
可以使用Python的OpenCV库来获取摄像头的视频流,并将视频流显示在Tkinter中的一个画布上。以下是一个简单的示例代码:
``` python
import tkinter as tk
import cv2
from PIL import Image, ImageTk
class CameraApp:
def __init__(self, root):
self.root = root
self.root.title("Camera App")
# 创建两个画布,一个用于显示摄像头视频,另一个用于显示其他内容
self.video_canvas = tk.Canvas(root, width=640, height=480)
self.video_canvas.pack(side=tk.LEFT)
self.other_canvas = tk.Canvas(root, width=640, height=480, background='white')
self.other_canvas.pack(side=tk.RIGHT)
# 打开摄像头
self.video_capture = cv2.VideoCapture(0)
# 更新摄像头视频画面
self.update_video()
def update_video(self):
# 从摄像头获取一帧视频
ret, frame = self.video_capture.read()
if ret:
# 将获取的视频帧转换成PIL图像
image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
image = Image.fromarray(image)
# 将PIL图像转换成Tkinter PhotoImage对象
photo = ImageTk.PhotoImage(image)
# 在画布上显示Tkinter PhotoImage对象
self.video_canvas.create_image(0, 0, anchor=tk.NW, image=photo)
# 每隔10毫秒更新一次视频画面
self.root.after(10, self.update_video)
if __name__ == '__main__':
root = tk.Tk()
app = CameraApp(root)
root.mainloop()
```
在这个示例代码中,我们创建了两个画布,一个用于显示摄像头视频,另一个用于显示其他内容。我们使用OpenCV库打开了摄像头,并使用`update_video()`方法更新视频画面。在每次更新视频画面时,我们从摄像头获取一帧视频,将其转换成PIL图像,然后将其转换成Tkinter PhotoImage对象,并在画布上显示。我们使用`after()`方法来定时更新视频画面。
阅读全文