我有两个有两个线程的课程:一个在我的GUI中显示网络摄像头帧,一个在同一个网络摄像头中录制一个视频。
我在每个班级使用不同的cv::VideoCapture
来访问我的网络摄像头。我的MainWindow和Recorder类的两个consturctors都有行theWebcam.open(INDEX)
来打开网络摄像头。我的问题是,当程序尝试打开第二个cv::VideoCapture
对象时,程序在启动时大约有50%的时间崩溃。如何在两个类中使用相同的网络摄像头?
答案 0 :(得分:1)
我在罗伯特所描述的技术方面取得了成功。我使用指针将图像传递给不同的线程,让主线程创建我需要的所有VideoCapture对象和namedWindow对象。我现在在我的专业领域之外发言,但我的经验表明,OpenCV中的VideoCapture和namedWindow对象不能在主线程之外的任何线程中创建,而必须传递到辅助线程。
答案 1 :(得分:0)
据我所知,这是不可能的(但我从未尝试过)。我更喜欢以下方法:
一个线程与相机“通信”,即抓取图像,并将一个副本发送到线程以写入文件,并将一个副本发送到gui以显示实时图像。
此外,只要相机不支持多播(假设它是ip-camera),帧速率很可能会下降。