OpenCV forEach 函数并行访问
OpenCV forEach function parallel access
我正在处理 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
看线程数运行ning时,发现只有一两个线程在..
我是不是做错了什么或者 forEach
不应该在 multi-threading
上 运行?你有什么资源可以帮助我进行 multi-threading
计算吗?
我运行在 ubuntu 上使用此代码:
g++ -std=c++1z -Wall -Ofast -march=native test3.cpp -o test3 `pkg-config --cflags --libs opencv`
你已经看过 TBB 了吗? Threading Building Blocks 是一个用于并行计算的 apache 许可库,您只需使用 -D WITH_TBB=ON
标志编译 OpenCV
参见 parallel_for 的示例:http://www.jayrambhia.com/blog/opencv-with-tbb
如果您决定采用 TBB,请执行以下步骤:
1 - 使用 TBB 支持重建 OpenCV。如果您 运行 进入 Linux 机器,请执行以下操作:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON BUILD_TBB=ON ..
2 - 重写您的程序以使用 TBB
查看那里的答案:Simplest TBB example关注最近的答案。
我正在处理 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
看线程数运行ning时,发现只有一两个线程在..
我是不是做错了什么或者 forEach
不应该在 multi-threading
上 运行?你有什么资源可以帮助我进行 multi-threading
计算吗?
我运行在 ubuntu 上使用此代码:
g++ -std=c++1z -Wall -Ofast -march=native test3.cpp -o test3 `pkg-config --cflags --libs opencv`
你已经看过 TBB 了吗? Threading Building Blocks 是一个用于并行计算的 apache 许可库,您只需使用 -D WITH_TBB=ON
标志编译 OpenCV参见 parallel_for 的示例:http://www.jayrambhia.com/blog/opencv-with-tbb
如果您决定采用 TBB,请执行以下步骤:
1 - 使用 TBB 支持重建 OpenCV。如果您 运行 进入 Linux 机器,请执行以下操作:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON BUILD_TBB=ON ..
2 - 重写您的程序以使用 TBB
查看那里的答案:Simplest TBB example关注最近的答案。