如何使用opencv同时打开多个VideoCapture?

时间:2019-07-10 16:54:38

标签: multithreading opencv c++11 video-capture

从ip摄像机创建和打开视频捕获大约需要2秒钟。 我想打开10个以上的视频捕获,为了获得更好的性能,我想通过在不同线程中创建视频捕获来完成这项工作。 但是视频捕获是按顺序创建的。

我看到了opencv的源代码,并在opencv在 backend_plugin.cpp 文件中创建捕获时发现了这种代码安全性。

void initBackend()
{
    AutoLock lock(getInitializationMutex());
    try {
        if (!initialized)
            loadPlugin();
    }

此代码是否阻止我的代码被并发? 还是我有一个错误?

这是我用于创建视频捕获的示例代码。

我使用了std :: thread和std :: future,但是结果是相同的。

vector<VideoCapture> captureList;
std::vector<std::thread> threads;

for (auto &it : urlList) {

  string url = it;

  threads.push_back(thread([](string url) {
      cout << "*********** : " << url << endl;
      VideoCapture& cap = VideoCapture(url);
      captureList.push_back(cap);

  }, it));
}

for (auto& thread : threads) {
  thread.join();
}

我该怎么做?

0 个答案:

没有答案
相关问题