【问题标题】:OpenCV Multithread with TBB for Video Processing用于视频处理的带有 TBB 的 OpenCV 多线程
【发布时间】:2014-07-24 14:31:07
【问题描述】:

我目前正在尝试加快运行 SURF 算法以检测视频对象的应用程序。

我想做的是使用线程(可能是boost线程)来加速进程并拥有两个线程:

  • 获取图像并对其进行处理,当算法在先前拍摄的帧上终止时,获取当前帧并再次运行
  • 另一个专注于从相机获取图像并显示它。

如果你想要伪代码,这里是我现在在 main 函数中的代码:

Mat imageReference, imageFromVideo;
imageReference = imread(argv[1], CV_LOAD_IMAGE_COLOR);

VideoCapture camVid(0);


namedWindow("Display video");
namedWindow("Display ref");
imshow("Display ref", imageReference);

// Surf algo on reference image
FastHessian fh(&image);
Surf surf(fh.GetIntegralImg(), fh.GetIptVect());
surf.descriptors(false);




while (true) {

    camVid >> imageFromVideo;

    // Surf on frame from video
    FastHessian fh2(&imageFromVideo); 
    Surf surf2(fh2.GetIntegralImg(), fh2.GetIptVect());
    surf2.descriptors(false);

    // Compare the two interest points from images
    vector<pair<InterestPoint, InterestPoint> > matches;
    matchIpoints(surf.getInterestPoints(), surf2.getInterestPoints(), matches);

    drawIPoints(&imageFromVideo, matches);

    int c = cvWaitKey(1);
    if ((char) c == 27) break;
    imshow("Display video", imageFromVideo);
    imshow("Display ref", imageRef);

}

我真的不知道如何开始使用多线程,因为我以前从未这样做过。我应该使用 Mutex 还是使用 Semaphore?有没有几行代码可以做到这一点?

谢谢!

【问题讨论】:

    标签: c++ multithreading opencv mutex


    【解决方案1】:

    您可以使用 C++11 并使用 &lt;thread&gt;。互斥量是具有两个可能值的信号量。互斥体通常就足够了。

    我尝试以相反的方式进行操作(工作线程从相机获取图像,主线程进行所有计算)并且遇到了很多问题 - 您可以查看 headermain class code。但祝你好运。

    【讨论】:

      【解决方案2】:

      我不确定这是否会提高程序的速度。 OpenCV 应该在对象检测中使用线程(至少在使用级联分类器的对象检测中,而不是关于 SURF 的使用)。如果您尝试在 2 个不同的线程上划分 CPU/内核电源,则可能会阻止 OpenCV 对象检测功能使用 2 个或更多内核。通常很难说哪个选项会更快。首先,我会检查 OpenCV 是否使用了多个线程 - 为此,只需运行一些复杂的对象检测(使用来自相机或大图像或视频的帧)并检查(即在任务管理器中)您的应用程序是否正在使用超过 1 个线程。如果否 - 使用 TBB 重新安装 OpenCV,在 mac 上只需使用 brew install opencv --with-tbb,对于 windows 有一个说明,在 linux 上它应该类似于 mac 解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-08
        • 2021-06-23
        • 2012-08-30
        相关资源
        最近更新 更多