将OpenCV mat传递给OpenCL内核执行



我试图将Opencv与OpenCL结合起来创建图像缓冲区并将其传递给GPU。我有imx6,它使用vivante核心(GPU)。不支持opencv的OCL特性。

我使用OpenCV读取Mat中的图像,然后想将其转换为浮点数组并传递给内核执行。

但是当我运行cl程序时,我得到一个错误段错误。

可能我无法将cv::mat转换为cl_float2,请帮助。

代码片段:

/* Load Image using opencv in opencl*/
cv::Mat shore_mask = cv::imread("1.jpg", 1);
cl_float2 *im = (cl_float2*)shore_mask.data;
cl_int h = shore_mask.rows;
cl_int w = shore_mask.cols;

/* Transfer data to memory buffer */
ret = clEnqueueWriteBuffer(queue , inimg, CL_TRUE, 0, h*w*sizeof(cl_float2), im, 0, NULL, &ev_writ);

我如何将mat转换为浮点矩阵并将其传递给opencl内核执行?

cv::Mat shore_mask = cv::imread("1.jpg", 1);

这给你大小为3*宽度*高度*8bit的BGR图像。现在,你做

ret = clEnqueueWriteBuffer(queue , inimg, CL_TRUE, 0, h*w*sizeof(cl_float2), im, 0, NULL, &ev_writ);

读取大小是宽度*高度*64位-你已经超过了数组的边界。将你的cv::Mat转换为合适的字体或更改阅读大小

相关内容

  • 没有找到相关文章

最新更新