使用OpenMP和OpenCV缩短处理时间

时间:2014-09-11 12:31:55

标签: opencv openmp

我对OpenMP和OpenCV非常陌生。我正在尝试使用OpenCV和OpenMP减少差分两个图像的时间。但是使用OpenMP并行循环所花费的时间不仅仅是循环中的顺序.Kindly建议可以做什么。

我的代码是

int main () 
{

omp_set_num_threads(4);
double omp_time1,omp_time2;

cv::Mat image_1= cv::imread("1.png");   
cv::Mat image_2=cv::imread("2.png");


vector<cv::Mat> rgb_planes_1;
cv::split( image_1, rgb_planes_1 );
vector<cv::Mat> rgb_planes_2;
cv::split( image_2, rgb_planes_2 );

cv::Mat sub_rgb_0[3];

#ifdef _OPENMP
omp_time1 = omp_get_wtime();
#endif

#pragma omp parallel private(tid)
  {
  tid = omp_get_thread_num();
  if (tid == 0)
    {
    nthreads = omp_get_num_threads();
    printf("Number of threads = %d\n", nthreads);
    }
  printf("Thread %d starting...\n",tid);
  #pragma omp for schedule(static) 
  for (i=0; i<3; i++)
    {

        absdiff(rgb_planes_1[i],rgb_planes_2[i],sub_rgb_0[i]);

     }
   }
#ifdef _OPENMP
omp_time2 = omp_get_wtime();
#endif

 printf("Parallel::%f seconds.\n", omp_time2 - omptime1);
}

需要 平行:: 0.006757秒。

当我在没有OpenMP段的情况下尝试相同时,CPU时钟给出 0.00200秒。

1 个答案:

答案 0 :(得分:0)

除了Alex和pburka给出的信息之外,你的sceduling对于如此少的循环次数并不是最佳选择,只有一轮的时间不能提供可靠的测量,请记住OpenCV是高度优化的并且使用自身TBB和SMID优化。所以你可能比用3通道Mat调用absdiff更好。