一段时间后,Opencv帧率逐渐降低

时间:2017-06-01 08:13:00

标签: c++ opencv capture frame-rate

我正在研究将跟踪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();
    }
}

你见过这样的行为吗?如何修复它以执行它应该执行的操作?

0 个答案:

没有答案