【问题标题】:OpenCL copyto() consumes more timeOpenCL copyto() 消耗更多时间
【发布时间】:2017-06-21 18:47:46
【问题描述】:

我将 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");

【问题讨论】:

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


    【解决方案1】:

    你可以使用

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

    【讨论】:

    • 感谢您的回复。如何继续使用网络摄像头?当使用VideoCapture 时,我们不能使用.getUmat(ACCESS_READ)
    • @SurakshaAjith VideoCapture 重载了提取运算符virtual VideoCapture&amp; operator&gt;&gt;(UMat &amp;image),所以你可以得到这样的帧:capture &gt;&gt; frame
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多