使用Mats进行OpenCV多线程

时间:2017-09-03 03:20:58

标签: c++ multithreading opencv

喂!所以我正在开发一个关于使用OpenCV进行多线程的任务。我的问题如下。如何让我的所有线程在同一图像上工作(存储在Mat中)?我知道制作副本会使它变慢,因此多线程没有任何意义。另外,我想控制我使用的线程数,甚至我已经看到引入了lambda c ++ 11我不知道如何制作它以便控制线程数。

我目前有一个函数来计算要放入图像的每个像素,所以我在串行上运行的代码看起来像这样:

for(int i=0;r<MyMat.cols;i++){
    for (int j=0;j<MyMat.rows;j++){
        uchar value = (uchar) MyFunction(i,j);
        MyMat.ptr<uchar>(i)[j] = value;
    }
}

英语不是我的母语,如果我没有正确解释,请要求澄清。任何帮助都是很好的帮助!

1 个答案:

答案 0 :(得分:3)

如果将图像分割为水平波段,则每个线程可以独立工作在自己的波段上。如果每个线程都没有更改超出其波段的任何图像数据,它应该可以工作。

事实上,OpenCV已经支持了这一点。 看看parallel_for_及其使用方法。