Reputation: 892
I am comparing OpenCL UMat
with that of OpenCL Mat
, I run the cvtColor()
function for 500 times.
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;
}
The output for the code in microseconds is
_________________________________
| OpenCL UMat= 2368720 microseconds-|
|_________________________________|
| OpenCL Mat = 312200 microseconds----|
|_________________________________|
From the above code i found that copyto()
function needs time to load the image from RAM on to GPU, so when the copyto() function runs, it consumes 1 sec to execute.
Is there any option, where i can directly make use of UMat.
Something like this
UMat img = imread("image_path");
Upvotes: 2
Views: 476
Reputation: 1011
You can use
UMat img = imread("image_path").getUMat(ACCESS_READ);
Upvotes: 2