cv::VideoCapture:从两个线程访问同一个网络摄像头
cv::VideoCapture: accessing the same webcam from two threads
我有两个类,有两个线程:一个在我的GUI中显示网络摄像头帧,一个录制来自同一网络摄像头的视频。我在每个班级中使用不同的cv::VideoCapture
来访问我的网络摄像头。我的主窗口和记录器类的两个结构器都有打开网络摄像头的线路theWebcam.open(INDEX)
。我的问题是,当程序尝试打开第二个cv::VideoCapture
对象时,大约 50% 的时间在启动时崩溃。如何在两个类中使用相同的网络摄像头?
我在罗伯特描述的技术上也取得了成功。我使用指针将图像传递到不同的线程,并让主线程创建我需要的所有 VideoCapture 对象以及 namedWindow 对象。我现在在我的专业领域之外发言,但我的经验表明,OpenCV 中的 VideoCapture 和 namedWindow 对象不能在主线程以外的任何线程中创建,而必须传递到辅助线程中。
据
我所知这是不可能的(但我自己从未尝试过)。我更喜欢以下方法:
一个线程与相机"通信",即抓取图像,并将一个副本发送到线程以写入文件,并将一个副本发送到 gui 以显示实时图像。
此外,只要摄像机不支持多播(假设它是IP摄像机),帧速率很可能会下降。
相关文章:
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 线程时访问静态映射时出现隔离错误
- 是否需要 mutex() 来安全地同时访问具有 2 个线程的数组的不同元素?
- 提供对不同类型的数据(建议、代码审查)的线程安全访问的类
- 从子线程访问指针
- 对C++中的队列进行多线程访问
- 对全局变量的多线程访问:我应该使用互斥锁吗?
- cuda:多个线程访问同一个全局变量
- 如何进行线程安全shared_ptr修改和访问?
- 如果迭代器的迭代器永远不会无效,则是STD :: MAP访问线程安全
- 如何在不将类数据成员作为参数传递的情况下访问线程中的类数据成员
- 在 C++ 中包含和访问线程全局变量
- QVector预先分配了访问线程安全性
- 使对unsigned char的访问线程安全(原子)
- 在 OpenMP 中访问线程的专用内存
- 访问线程中的vector.front()会导致运行时错误
- 访问线程(MFC)中的主对话框变量
- 从主循环windows访问线程变量