【发布时间】:2017-09-03 03:20:57
【问题描述】:
嘿!所以我正在做一个关于 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;
}
}
英语不是我的母语,如果我没有正确解释自己,请要求澄清。任何帮助都是好帮助!
【问题讨论】:
-
如果您修改
Mat,那么您可能需要原始Mat的硬拷贝。对于不修改Mat的线程,可以直接使用全局变量赋值Mat。 -
opencv Mat 没有什么特别之处。一个不错的功能可能是您可以在每一行的末尾添加一个填充,这可能会或可能不会帮助您获得一些不错的内存访问行为。如果您必须“修改”图像,您可能希望将结果保存在另一个 Mat 中而不是真正的修改。
标签: c++ multithreading opencv