OpenCL copyto() 消耗更多时间
OpenCL copyto() consumes more time
我正在比较 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() 函数 运行s 时,它执行需要 1 秒.
有什么选项可以让我直接使用 UMat。
像这样
UMat img = imread("image_path");
您可以使用
UMat img = imread("image_path").getUMat(ACCESS_READ);
我正在比较 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() 函数 运行s 时,它执行需要 1 秒.
有什么选项可以让我直接使用 UMat。
像这样
UMat img = imread("image_path");
您可以使用
UMat img = imread("image_path").getUMat(ACCESS_READ);