首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenCV forEach函数并行访问

OpenCV forEach函数并行访问
EN

Stack Overflow用户
提问于 2017-12-14 03:29:08
回答 1查看 2K关注 0票数 0

我正在处理RGB图像,并对每个通道(R+G+B)执行相同的操作,因此我一直在寻找能够帮助我改进代码并运行它的并行函数(3*?)再快点。现在我使用forEach函数,如下所示:

代码语言:javascript
运行
复制
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上运行我的代码,如下所示:

代码语言:javascript
运行
复制
g++ -std=c++1z -Wall -Ofast -march=native test3.cpp -o test3 `pkg-config --cflags --libs opencv`
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-14 10:53:54

你已经看过TBB了吗?线程构建块是一个用于并行计算的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聚焦于最新的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47800790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档