OpenCV捕获并行编程的延迟

时间:2016-12-26 16:14:41

标签: opencv parallel-processing openmp tbb

我正在尝试从OpenCV并行编程中捕获网络摄像头。

当我捕获没有并行块的帧时,它可以使用60fps。

但是当它在OpenMP或TBB等并行块中工作时,它只能工作10~20fps。

特别是,VideoCapture::grab()函数在并行块中需要更多的两倍或三倍。

下面有使用OpenMP或TBB的捕获编程代码。

使用openMP

#pragma omp parallel
#pragma omp sections
{
#pragma omp section
{
    clock_t a1 = clock();
    cap.grab();
    printf("grab : %f\n", double(clock() - a1) / double(CLOCKS_PER_SEC));
    cap.retrieve(Origin);
    printf("cam : %f\n", double(clock() - a1) / double(CLOCKS_PER_SEC));
}

#pragma omp section
{
    clock_t a2 = clock();
    BOriginal.copyTo(OriginA);
    cvtColor(AAOri, HSOriginA, COLOR_BGR2HSV);
    HSOriginA.copyTo(HSOrigin);
}
}

使用TBB

task_scheduler_init init;

parallel_invoke([capture, Origin]()->void {

    clock_t aas = clock();
    cap.grab();
    printf("grab time : %f\n", double(clock() - aas) / double(CLOCKS_PER_SEC));
    cap.retrieve(Origin);
    printf("cam time : %f\n", double(clock() - aas) / double(CLOCKS_PER_SEC));

},
[BOriginal, OriginA, HSOriginA, HSOrigin]()->void {
    clock_t a2 = clock();
    BOriginal.copyTo(OriginA);
    cvtColor(OriginA, HSOriginA, COLOR_BGR2HSV);
    HSOriginA.copyTo(HSOrigin);

});

在OpenMP中,捕获编程块无论是在omp master还是在omp singleomp section,它的工作原理都是一样的。

如何在并行编程中立即捕获(grab()retrieve())。

我的环境是ARM处理器和Linux Fedora 3.10内核。

0 个答案:

没有答案