我想在一个i.mx6平台上使用OpenCL来改进bayer到rgb的转换。我正在使用the OpenCL Shader进行转换。我期待的OpenCL版本将比OpenCV的cvtColor bayer到rgb转换(它使用for循环)更快。但事实证明,OpenCL版本比OpenCV的基于CPU的转换慢得多。OpenCL bayer到rgb比CPU版本慢
OpenCV的:28.3 FPS为1280 * 960的图像 的OpenCL:7.15 FPS为1280 * 960的图像
size_t global[] = {1280, 960};
Mat bayer = Mat(960, 1280, CV_8UC1);
Mat rgb_image = Mat(960, 1280, CV_8UC3);
cl_input = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR, width * height, bayer.data , &ret);
if(ret != CL_SUCCESS){
cout << "OpenCL Buffer Allocation Error\n" ;
exit(0);
}
cl_output = clCreateBuffer(context, CL_MEM_WRITE_ONLY | CL_MEM_USE_HOST_PTR, width * height * 3, rgb_image.data, &ret);
if(ret != CL_SUCCESS){
cout << "OpenCL OP Buffer Error\n" ;
exit(0);
}
while(true){
capture_image(bayer);
ret = clEnqueueNDRangeKernel(cq, kernel, 2, NULL, global, NULL, 0, NULL, NULL);
if(ret != CL_SUCCESS){
cout << ret << " OpenCL kernel exec Error\n" ;
exit(0);
}
ret = clEnqueueReadBuffer(cq, cl_output, CL_TRUE, 0, width * height * 3, rgb_image.data, 0, NULL, NULL);
if(ret != CL_SUCCESS){
cout << "OpenCL OP Buffer read Error\n" ;
exit(0);
}
}
有什么我在明智的配置缺失?我是新来的OpenCL和我不知道如何调用loop.The平台内部信息的OpenCL内核如下:
- 平台名称:Vivante的OpenCL的平台
- 平台简介:EMBEDDED_PROFILE
- 平台版本:OpenCL的1.1
平台供应商:芯公司
设备名称:Vivante的OpenCL设备
- 设备简介:EMBEDDED_PROFILE
- 设备版本:OpenCL的1.1
- 设备供应商:芯公司
- 设备最大工作项目尺寸:3 d
- 设备最大工作组大小:1024
PS :我无法在OpenCV中使用OpenCL,因为i.mx6不支持OpenCV中OpenCL支持所需的OpenCL完整配置文件