当前位置:   article > 正文

opencv多线程读取摄像头[python]_opencv读取摄像头

opencv读取摄像头

双线程读取摄像头

目的:

  1. 使用队列存储摄像头实时读取图像和释放,减少内存消耗
  2. 使用多线程,一个读线程一个处理线程

实现

#-*- 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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/945762
推荐阅读
相关标签
  

闽ICP备14008679号