网上下载tbb40_20110809oss解压 安装具体过程 详细见http://bbs.elecfans.com/blog-710245-234834.html
重点讲下TBB的配置,其实跟opencv的配置一样,就是把include和lib 分别添加到包含目录和库目录,如下所示
在<包含目录>里面添加TBB40的Include文件夹:D:\design software\tbb40_20110809oss\include
在<库目录>里添加TBB40的LIB文件位置:D:\design software\tbb40_20110809oss\lib\ia32\vc10
添加好之后,在头文件中添加:
#include "tbb/tbb_stddef.h"
#if TBB_VERSION_MAJOR*100 + TBB_VERSION_MINOR >= 202
#include "tbb/tbb.h"
#include "tbb/task.h"
#undef min
#undef max
#endif
#pragma comment(lib, "tbb.lib")
using namespace tbb;
主体示例:
typedef struct gData
{
int idx;
Mat fFeatMat;
} gFeatureData;
class testTBB
{
public:
void operator () (const blocked_range<size_t>& r) const
{
for (size_t i = r.begin(); i != r.end(); ++ i)
{
.
.
Mat fFeatMat;
gFeatureData gFeacture;
gFeacture.idx =i;
grborImg.copyTo(FeatMat);
gFeactures->push_back(gFeacture);
}
}
testTBB(const Mat& _grayImg ,concurrent_vector< gFeatureData >& _gFeactures)
{
grayImg = _grayImg;
gFeactures = &_gFeactures;
}
Mat grayImg;
concurrent_vector<gFeatureData> *gFeactures;
};
调用示例:
concurrent_vector<gFeatureData> gFeactures;
parallel_for(blocked_range<size_t>(0, n), testTBB (grayImg ,gFeactures));
这里要用concurrent_vector是为了在用push_back压入结果是防止访问冲突;
其他的结果在不涉及在输出结果时同时访问问题,其参数类型跟一般的一样