当我使用Valgrind运行程序时,为什么cv :: VideoCapture无法打开USB摄像机?

我有一个多线程程序,该程序使用opencv从USB相机读取和处理图像。我有一个线程仅从相机读取帧,而另一个线程处理这些图像。如果相关的话,我正在JetsonNano单板计算机上运行该程序。

它运行正常,直到我使用Valgrind检查内存泄漏。在Valgrind下,我的VideoCapture对象无法打开摄像机。我想知道为什么在Valgrind下会发生这种情况,而不是在程序正常运行时会发生这种情况。

出于测试目的,我删除了所有与图像处理有关的代码。剩下的相关代码已附在下面。

捕获定义:

    cv::VideoCapture cap;

捕获初始化:

    Cameracontroller::Cameracontroller : cap(0){}

读框功能:

    void Cameracontroller::startReadingFromCamera() {
        while (readingFromCamera) { //boolean member variable
            mutex.lock();

            std::cout << cap.isOpened() << std::endl;
            //this prints 0 under Valgrind,1 when run without Valgrind 

            //currentFrame is a member variable.  
            //This is how the processing thread will access the newest frame
            cap.read(currentFrame); 
            mutex.unlock();
            std::this_thread::sleep_for(std::chrono::milliseconds(10));
        }
    }

线程初始化:

    Cameracontroller cameracontroller;
    thread videoThread(&Cameracontroller::startReadingFromCamera,&cameracontroller);

如果需要,我可以包括Valgrind输出,但是我对Valgrind还是陌生的。我不确定日志的哪一部分对分析此问题有用。

humingming001 回答:当我使用Valgrind运行程序时,为什么cv :: VideoCapture无法打开USB摄像机?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3139371.html

大家都在问