我试图将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转换为合适的字体或更改阅读大小