我想在一個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完整配置文件