opencv多线程读取摄像头[python]
【代码】opencv多线程读取摄像头[python]
·
双线程读取摄像头
目的:
- 使用队列存储摄像头实时读取图像和释放,减少内存消耗
- 使用多线程,一个读线程一个处理线程
实现
#-*- coding:utf-8 _*-
import cv2
import multiprocessing as mp
"""
读取摄像头进程,将摄像头读取的图像存储到队列当中
"""
def ImgRead(DealFlag, ImgQueue):
cam = cv2.VideoCapture(0)
if not cam.isOpened():
print("Unable to open camera")
else:
while True:
ret, Img = cam.read()
if not ret:
break
if not DealFlag.value:
ImgQueue.put(Img)
DealFlag.value = 1
cam.release()
"""
处理图像线程,将图像从队列弹出,进行处理
"""
def ShowImg(DealFlag, ImgQueue):
while True:
if DealFlag.value and not ImgQueue.empty():
Img = ImgQueue.get()
DealFlag.value = 0
cv2.imshow('Img', Img)
cv2.waitKey(5)
def vision():
ImgQueue = mp.Queue() # 先进先出队列,实现不同进程数据交互
DealFlag = mp.Value('B', 0) # DealFlag为1,则表示有图片,可处理
Mps = []
Mps.append(mp.Process(target=ImgRead, args=(DealFlag, ImgQueue)))
Mps.append(mp.Process(target=ShowImg, args=(DealFlag, ImgQueue)))
[Mp.start() for Mp in Mps]
Mps[0].join()
[Mp.terminate() for Mp in Mps]
if __name__ == '__main__':
vision()
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)