我正在研究将跟踪4台摄像机上的物体的项目,所以我需要一次读取4个来源的帧。我尝试了这样,在我的分析中达到了15 fps。
cv::Mat uloz_analyzuj(cv::VideoCapture capture, cv::Mat Feed{
capture.read(Feed);
return Feed;
}
std::thread t1([&capture, &cameraFeed, &gpuFeed]() {
cameraFeed = uloz_analyzuj(capture, cameraFeed);
});
std::thread t2([&capture2, &cameraFeed2, &gpuFeed2]() {
cameraFeed2 = uloz_analyzuj(capture2, cameraFeed2);
});
std::thread t3([&capture3, &cameraFeed3, &gpuFeed3]() {
cameraFeed3 = uloz_analyzuj(capture3, cameraFeed3);
});
std::thread t4([&capture4, &cameraFeed4, &gpuFeed4]() {
cameraFeed4 = uloz_analyzuj(capture4, cameraFeed4);
});
t1.join();
t2.join();
t3.join();
t4.join();
所以我尝试了不同的方法来实现更多的fps因为我知道这是我项目中的瓶颈部分而且我获得了更多的fps(大约24)。但经过一段时间可能30秒后,我只有40%的fps以8 fps结束。
std::thread threadik(uloz_analyzuj, &capture, &Feed);
threadik.detach();
std::thread threadik2(uloz_analyzuj, &capture2, &Feed2);
threadik2.detach();
std::thread threadik3(uloz_analyzuj, &capture3, &Feed3);
threadik3.detach();
std::thread threadik4(uloz_analyzuj, &capture4, &Feed4);
threadik4.detach();
和方法看起来像这样:
void uloz_analyzuj(cv::VideoCapture *capture, cv::Mat *Feed) {
while (1) {
mtxCam.lock();
*capture >> *Feed;
mtxCam.unlock();
}
}
你见过这样的行为吗?如何修复它以执行它应该执行的操作?