我希望能够使用OpenMP对IplImage进行一些转换操作。这是一个简单的转换,将图像颠倒过来。使用OpenMP的代码与不使用的代码运行的结果相同,所以这并不重要。
void UpsideDownFilter::filter(IplImage* dstImage) {
uchar temp;
int j;
int i;
#pragma omp parallel shared(dstImage) private(j, i, temp)
{
// std::cout << omp_get_thread_num() << std::endl;
#pragma omp for schedule(static, 30) nowait
for(j = 0; j < dstImage->height / 2; ++j) {
for(i = 0; i < dstImage->widthStep; ++i) {
temp = dstImage->imageData[i + j * dstImage->widthStep];
dstImage->imageData[i + j * dstImage->widthStep] =
dstImage->imageData[i + (dstImage->height - 1 - j) *
dstImage->widthStep];
dstImage->imageData[i + (dstImage->height - 1 - j) *
dstImage->widthStep] = temp;
}
}
}
}
我已经将 #pragma omp for 放到了内部循环中。当我不知道出了什么问题时,我通常会做一些其他的魔法操作(删除这个,添加那个)。这是我从代码中调用该方法的方式:
for (vector<filter_ptr>::iterator it = filters.begin();
it != filters.end(); ++it) {
(*it)->filter(dstImage);
}
有人可以告诉我我做错了什么吗?
(此内容涉及IT技术问题)