多视频捕获流Opencv

时间:2020-02-05 05:09:37

标签: python opencv webcam

我有一组四个通过RTSP流式传输的IP摄像机。我正在尝试通过创建四个单独的摄像头线程来读取所有四个摄像头,这些线程继续从流中读取并显示在OpenCV窗口中。但是到目前为止,我只能读取一张图像,并且不会显示在窗口中。下面是代码:

import cv2
import threading


class CameraThread(threading.Thread):
    def __init__(self, address, camera_id):
        super(CameraThread, self).__init__()
        self.camid = camera_id
        self.addr  = address
        self.cap   = cv2.VideoCapture(self.addr)
        self.win   = f'Camera {self.camid}'
        cv2.namedWindow(self.win, cv2.WINDOW_NORMAL)

    def show(self, im):
        cv2.imshow(self.win, im)
        key = cv2.waitKey(1)

        if key == ord('q'):
            self.finish()

    def finish(self):
        self.cap.release()
        cv2.destroyWindow(self.win)

    def capture(self):
        if self.cap.isOpened():
            ok, im = self.cap.read()
            print('captured')

        while True:
            #cv2.imshow(self.win, im)
            ok, im = self.cap.read()
            print('capped')
            self.show(im)

            if not ok:
                break

        print('done')
        self.finish()

    def run(self):
        self.capture()


def main():
    url = 'rtsp://user:pwd@host:port/defaultPrimary-2?streamType=u'

    t0 = CameraThread(url, '0')
    t0.start()

if __name__ == '__main__':
    main()

该代码几乎是从this SO post开始的。

我尝试了不使用线程的方法,并且可以流式传输和显示单个视频。我还认为,也许OpenCV GUI无法正常工作,因为该工作是因为我正在主线程之外更新GUI。

有人知道为什么这行不通吗,并提出了更好的建议吗?

0 个答案:

没有答案