python-opencv——多线程之间实现图像数据共享,并对摄像头图像的获取、处理操作

简单粗暴,直接上代码,本质就是将每一步都分成一个进程进行管理,如果是单纯的简单图像处理,这样其实没有必要,这里适合一个甚至多个深度学习模型同时运行时,还要进行图像处理的复杂耗时任务。

主体代码

import numpy as np
import cv2
from multiprocessing import Process, Queue
import time
import os
import sys

# 进程0:从摄像头中读取图像,并将数据放入quene中
def cap_get(q):
    cap = cv2.VideoCapture(0) 
    n = 0
    while 1:
        n= n+1
        process = 0
        ret, frame = cap.read()
        if n%2 == 0:
            q.put([frame, n, 1])
            print("send          1111111")
        else:
            q.put([frame, n, 2])
            print("send          2222222")

# 进程1:实时将图像显示出来
def show(q):
    while 1:
        frame, data, process = q.get()
        try:
            if process == 2:
                print("put back data!")
                q.put([frame, data, process])
                continue
            cv2.imshow("frame", frame)
            key = cv2.waitKey(1)
            print("111111data", data)
            if key & 0xFF == ord('q') or key == 27:
                cap.release()
                cv2.destroyAllWindows()
                sys.exit(0)      
        except:
            pass

# 进程2:实时将quene中的其他数据读取出进行处理
def draw(q):
    while True:
        frame, data, process = q.get()
        try:
            print("222222data", data)
        except:
            pass
        # cv2.

if __name__ == '__main__':
    

    q = Queue()
    p = Process(target=cap_get, args=(q,))
    p2 = Process(target=show, args=(q,))
    p3 = Process(target=draw, args=(q,))
    p.start()
    p2.start()
    p3.start()
    

show进程

可以实时将进程cap_get中的图像获取进行展示:
python-opencv——多线程之间实现图像数据共享,并对摄像头图像的获取、处理操作_第1张图片

draw进程

实时打印出当前的数据。
执行结果可以看出,进程1只会获取属于它的数据,进程2也是。
python-opencv——多线程之间实现图像数据共享,并对摄像头图像的获取、处理操作_第2张图片

我也是全网找了半天,也没个进程间共享图像数据的文章。这个如果有帮助,希望给点个赞呀~

你可能感兴趣的:(python,opencv,opencv,python,计算机视觉)