cv::VideoCapture:从两个线程访问同一个网络摄像头

cv::VideoCapture: accessing the same webcam from two threads

本文关键字:访问 线程 同一个 网络 摄像头 两个 VideoCapture cv      更新时间:2023-10-16

我有两个类,有两个线程:一个在我的GUI中显示网络摄像头帧,一个录制来自同一网络摄像头的视频。我在每个班级中使用不同的cv::VideoCapture来访问我的网络摄像头。我的主窗口和记录器类的两个结构器都有打开网络摄像头的线路theWebcam.open(INDEX)。我的问题是,当程序尝试打开第二个cv::VideoCapture对象时,大约 50% 的时间在启动时崩溃。如何在两个类中使用相同的网络摄像头?

我在罗伯特描述的技术上也取得了成功。我使用指针将图像传递到不同的线程,并让主线程创建我需要的所有 VideoCapture 对象以及 namedWindow 对象。我现在在我的专业领域之外发言,但我的经验表明,OpenCV 中的 VideoCapture 和 namedWindow 对象不能在主线程以外的任何线程中创建,而必须传递到辅助线程中。

我所知这是不可能的(但我自己从未尝试过)。我更喜欢以下方法:

一个线程

与相机"通信",即抓取图像,并将一个副本发送到线程以写入文件,并将一个副本发送到 gui 以显示实时图像。

此外,只要摄像机不支持多播(假设它是IP摄像机),帧速率很可能会下降。