在一般的情况下,我们是可以使用OpenCV来打开一个摄像头,然后来根据视频面来处理其他业务。打开摄像头的方式详情可以参看:。
但在有些场景中,需要同时打开多个摄像头,这时就需要使用多线程的方法来处理。
本文主要演示如何使用多线程同时开启多个摄像头。
实现代码import cv2
import threading
#定一个类,继承threading.Thread
class PreThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def OpenCam(self,id=0):
cap = cv2.VideoCapture(id)
while True:
ret, frame = cap.read()
cv2.imshow("Cam" str(id), frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
if cv2.getWindowProperty('Cam' str(id),cv2.WND_PROP_AUTOSIZE) < 1:
break
cap.release()
cv2.destroyAllWindows()
#定义带有参数的开启线程的方法
def thread_run(self,id):
'''
ID:camera ID
'''
th=threading.Thread(target=self.OpenCam,args=(id,))
th.start()
#实例化类,并调用方法
pread=PreThread()
pread.thread_run(0)
pread.thread_run(1)
运行效果:
同时开启两个摄像头
从画面来看,两个摄像头窗口的视频非常流畅,没有一点卡顿现象。