简单粗暴,直接上代码,本质就是将每一步都分成一个进程进行管理,如果是单纯的简单图像处理,这样其实没有必要,这里适合一个甚至多个深度学习模型同时运行时,还要进行图像处理的复杂耗时任务。
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
进程draw
进程实时打印出当前的数据。
执行结果可以看出,进程1只会获取属于它的数据,进程2也是。
我也是全网找了半天,也没个进程间共享图像数据的文章。这个如果有帮助,希望给点个赞呀~