python opencv cv2 imshow threading 多线程

除了线程同步,还需要注意的是「窗口处理」要放在主线程

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
import threading
from time import sleep
from queue import Queue
import cv2
import numpy as np
from functools import reduce

print(sys.version)

q = Queue()

def run(n):
    thread = threading.current_thread()
    thread.setName('thread-fuck')
    print('tid is: {0}'.format(thread.ident))
    print('thread name is: {0}'.format(thread.getName()))

    for i in range(100):
        img = np.random.randint(0,255,(200,300)).astype(np.uint8)
        q.put(img)
        sleep(0.1)

    q.put(0)


if __name__ == '__main__':
    thread = threading.Thread(target=run, args=(6,))
    thread.start()

    while True:
        try:
            item = q.get(block=False)
        except Exception as e:
            keycode = cv2.waitKey(20)
            if keycode & 0xFF == ord('q'):
                break
            continue

        if type(item) == int:
            break

        if type(item) == type(0):
            break
        cv2.imshow('fuck', item)

    thread.join()

    cv2.waitKey(0)
    cv2.destroyAllWindows()
    print('done!')

posted on   明天有风吹  阅读(3629)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通

导航

+V atob('d2h5X251bGw=')

请备注:from博客园

点击右上角即可分享
微信分享提示