【发布时间】:2017-12-13 19:29:07
【问题描述】:
我正在处理 RGB 图像并对每个通道 (R+G+B) 执行相同的操作,因此我一直在寻找可以帮助我改进代码并运行它的并行函数(3*?)快点。现在我像这样使用forEach 函数:
unsigned char lut[256];
for (int i = 0; i < 256; i++)
lut[i] = cv::saturate_cast<uchar>(pow((float)(i / 255.0), fGamma) * 255.0f); //pow: power exponent
dst.forEach<cv::Vec3b> //dst is an RGB image
(
[&lut](cv::Vec3b &pixel, const int* po) -> void
{
pixel[0] = lut[(pixel[0])];
pixel[1] = lut[(pixel[1])];
pixel[2] = lut[(pixel[2])];
}
);
但是当我使用htop查看运行的线程数时,我只发现一两个线程在..
是我做错了什么还是forEach 不应该在multi-threading 上运行?你有什么资源可以帮助我进行multi-threading 计算吗?
我在 ubuntu 上运行我的代码:
g++ -std=c++1z -Wall -Ofast -march=native test3.cpp -o test3 `pkg-config --cflags --libs opencv`
【问题讨论】:
-
似乎特定于平台。什么版本的 OpenCV?在具有 v3.1.0 的 Windows 上,它将完全使用所有内核。
-
@DanMašek 我在 linux 上使用 OpenCV 3.3
标签: c++ multithreading opencv foreach htop