首页 > 其他分享 >多线程读取多个摄像头并把画面显示到Tkinter 的 label上面

多线程读取多个摄像头并把画面显示到Tkinter 的 label上面

时间:2023-10-29 21:44:24浏览次数:44  
标签:__ index Tkinter self label camera 多线程 image

import cv2
import threading
import tkinter as tk
from PIL import Image, ImageTk


class CameraThread(threading.Thread):
    def __init__(self, camera_index, label):
        threading.Thread.__init__(self)
        self.camera_index = camera_index
        self.label = label
        self.stop_event = threading.Event()

    def run(self):
        cap = cv2.VideoCapture(self.camera_index)
        while not self.stop_event.is_set():
            ret, frame = cap.read()
            if ret:
                frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                image = Image.fromarray(frame)
                image = ImageTk.PhotoImage(image)
                self.label.config(image=image)
                self.label.image = image
        cap.release()

    def stop(self):
        self.stop_event.set()


def main():
    root = tk.Tk()
    root.title("Multiple Camera Display")

    camera_indices = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
    labels = []
    threads = []

    for i, camera_index in enumerate(camera_indices):
        label = tk.Label(root)
        label.grid(row=i // 4, column=i % 4)
        labels.append(label)
        thread = CameraThread(camera_index, label)
        thread.start()
        threads.append(thread)

    root.mainloop()
    print("结束窗口")

    for thread in threads:
        thread.stop()
        thread.join()


if __name__ == "__main__":
    main()

 

标签:__,index,Tkinter,self,label,camera,多线程,image
From: https://www.cnblogs.com/zwnsyw/p/17796566.html

相关文章

  • C++多线程编程——线程的基本概念和使用方法
    什么是线程?在计算机科学中,线程是进程中的一个执行控制单元,也被称为执行路径。每个进程可以包含多个线程,每条线程并行执行不同的任务。线程是操作系统可识别的最小执行和调度单位。进程和线程的区别进程是程序在某个数据集合上的一次运行活动,也是操作系统进行资源分配和保护的......
  • java实现多线程下载器
    前言:......
  • [Java]Java初学之多线程05--Lock锁
    Intro除了synchronized关键字,从JDK5.0开始,Java提供了更强大的线程同步机制--通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当。本文简单讲一下Lock锁的概念以及简单应用。正文其实理解了synchronized关键字后,Lock锁的理解就会变得简单起来。Lock锁实际上是使用了j......
  • 手把手教你:如何用Java多线程模拟银行叫号服务
    大家好,我是小米!今天,我将和大家一起探讨一个非常有趣的话题——Java多线程模拟银行叫号服务。这不仅是一个有趣的编程练习,还可以帮助我们更好地理解多线程编程和并发控制。在这篇文章中,我将带领大家一步步实现一个模拟银行叫号服务系统,包括三个窗口、按叫号顺序依次到窗口服务、每个......
  • [Java]Java初学之多线程03--同步与锁
    Intro本篇文章主要关于多线程"同步"以及"锁"的相关内容~正文同步(Synchronize)概念“同步”是基于“并发”的需求而出现的所谓并发,就是同一个对象被多个线程同时操作,比如两个人同时从同一个账户取钱,再比如春运抢票。多个线程同时使用一个资源,必然会造成混乱。想象一下从前......
  • rust 创建多线程web server
    创建一个httpserver,处理http请求。创建一个单线程的web服务webserver中主要的两个协议是http和tcp。tcp是底层协议,http是构建在tcp之上的。通过std::net库创建一个tcp连接的监听对象,监听地址为127.0.0.1:8080.usestd::net::TcpListener;fnmain(){l......
  • k8s-label和selector
    说明k8s通过lable来为资源打上标签,通过selector来查找。而不是像传统mysql对象之间关联使用强关联外键属性比如deployment需要关联RS则通过RS打上标签,deployment通过配置select选择器去查找标签的特性label有如下的一些特点:label可以被附加到各种资源对象上一个资源对象......
  • 前端多线程处理——async/await
    async从字面上看就是“异步”,它放在函数定义之前,是使该函数在调用时开一个子线程,以不影响主线程的运行。而await经常和async组合使用,在async定义的函数中来等待需要时间运行的代码(如ajax请求、Promise对象)的运行结果,以做后续的处理。  如下面的返回Promise对象......
  • Java基础 多线程的 6 种状态
       Java的虚拟机当中没有定义运行状态,因为当线程抢夺到CPU执行权的时候,虚拟机会把当前线程交给操作系统管理,虚拟机就不管了。 ......
  • Java继承 多线程的实现方式——利用 Callable 接口 和 Future 接口方式实现
    利用Callable接口和Future接口方式实现:这种实现方式可以获取到多线程运行的结果 步骤:1.创建一个类,类名比如叫MyCallable,并实现 Callable接口  注:Callable接口有一个泛型,因为这种方式可以获取到多线程运行的结果,泛型就表示结果的类型2.重写 Callable接口里面......