OpenCL copyto()消耗更多时间

时间:2017-02-04 12:40:48

标签: c++ opencv image-processing opencl imread

我正在将OpenCL UMat与OpenCL Mat进行比较,我运行cvtColor()函数500次。

int OpenCL_UMat()
{
    Mat img;
    UMat uimage, U1;
    img = imread("image_path");
    for (int i = 1; i < 500; i++)
    {
        img.copyTo(uimage); // Here it takes 1 sec
        cvtColor(uimage, U1, CV_BGR2GRAY);
    }
    imshow("image1", U1);
    return 0;
}

int OpenCL_Mat()
{
    Mat img, img1;
    img = imread("image_path");
    for (int i = 1; i < 500; i++)
    {
        cvtColor(img, img1, CV_BGR2GRAY);
    }
    imshow("image1", img);
    return 0;
}

以微秒为单位的代码输出为
 _________________________________
| OpenCL UMat = 2368720微秒 - |
| _________________________________ |
| OpenCL Mat = 312200微秒---- |
| _________________________________ |

从上面的代码中我发现copyto()函数需要时间将图像从RAM加载到GPU,因此当copyto()函数运行时,执行时耗时1秒。

有没有选项,我可以直接使用UMat。
像这样的事情UMat img = imread("image_path");

1 个答案:

答案 0 :(得分:2)

您可以使用

UMat img = imread("image_path").getUMat(ACCESS_READ);