我有一个多线程程序,该程序使用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还是陌生的。我不确定日志的哪一部分对分析此问题有用。