2
我正在比较OpenCL UMat
与OpenCL Mat
,我运行了cvtColor()
函数500次。OpenCL copyto()消耗更多时间
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");
谢谢你的回复。我如何继续使用网络摄像机?当使用VideoCapture时,我们不能使用'.getUmat(ACCESS_READ)'。 –
@SurakshaAjith VideoCapture重载了提取操作符'virtual VideoCapture&operator >>(UMat&image)',所以你可以得到这样一个帧:'capture >> frame'。 – w1ck3dg0ph3r