Python 同时使用OpenCV从两个摄像头捕获视频

Python 同时使用OpenCV从两个摄像头捕获视频

在本文中,我们将介绍如何使用Python和OpenCV库从两个不同的摄像头同时捕获视频。我们将使用OpenCV的VideoCapture()方法来获取视频输入,并使用多线程来同时处理两个视频流。

阅读更多:Python 教程

1. 导入必要的库

首先,我们需要导入所需的库。我们将使用cv2来进行视频捕获和处理,threading用于多线程编程。

import cv2
import threading
Python

2. 定义捕获视频的函数

我们将创建两个函数来分别捕获两个摄像头的视频。每个摄像头都会在一个单独的线程中执行。以下是捕获视频的函数示例:

def capture_video(camera_id, output_file):
    video_capture = cv2.VideoCapture(camera_id)
    width = int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter(output_file, fourcc, 20.0, (width, height))

    while video_capture.isOpened():
        ret, frame = video_capture.read()
        if ret:
            out.write(frame)
            cv2.imshow('Camera', frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    video_capture.release()
    out.release()
    cv2.destroyAllWindows()
Python

上述函数中,我们首先创建了一个VideoCapture对象来打开指定的摄像头。然后,我们获取视频的宽度和高度,并设置视频写入器的参数。接下来,我们开始一个无限循环来读取视频帧。如果成功读取到了帧,我们将其写入输出文件同时在窗口中展示,并检查是否按下了键盘上的”q”键来退出循环。

3. 创建线程并启动视频捕获

在主程序中,我们将创建两个线程来同时捕获两个摄像头的视频。以下是示例代码:

if __name__ == '__main__':
    camera1 = threading.Thread(target=capture_video, args=(0, 'camera1_output.avi'))
    camera2 = threading.Thread(target=capture_video, args=(1, 'camera2_output.avi'))

    camera1.start()
    camera2.start()

    camera1.join()
    camera2.join()
Python

上述代码中,我们创建了两个线程,分别用于捕获摄像头1和摄像头2的视频。我们将摄像头ID和输出文件名作为参数传递给capture_video函数。然后,我们启动两个线程,并使用join()函数等待两个线程执行完毕。

总结

本文介绍了如何使用Python和OpenCV从两个不同的摄像头同时捕获视频。我们首先导入了必要的库,然后定义了捕获视频的函数。接着,我们使用多线程来创建并启动两个线程,分别捕获两个摄像头的视频。通过本文的示例,您可以轻松地从多个摄像头获取视频,并进行进一步的处理和分析。Happy coding!

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程