OpenCL copyto() занимает больше времени

Я сравниваю 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() Функция требует времени для загрузки образа из ОЗУ в графический процессор, поэтому при запуске функции copyto() на ее выполнение уходит 1 секунда.

Есть ли вариант, где я могу напрямую использовать UMat.
Что-то вроде этого
UMat img = imread("image_path");

1 ответ

Решение

Ты можешь использовать

UMat img = imread("image_path").getUMat(ACCESS_READ);
Другие вопросы по тегам