gpt4 book ai didi

opencv - 将OpenCV mat传递给OpenCL内核以执行

转载 作者:行者123 更新时间:2023-12-02 16:39:03 25 4
gpt4 key购买 nike

我正在尝试将Opencv与OpenCL结合使用以创建图像缓冲区并将其传递给GPU。
我有使用vivante核心(GPU)的imx6。
不支持opencv的OCL功能。

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

但是运行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转换为float矩阵并将其传递给opencl内核以执行?

最佳答案

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

这将为您提供3 *宽*高* 8位大小的BGR图像。你现在做
ret = clEnqueueWriteBuffer(queue , inimg, CL_TRUE, 0, h*w*sizeof(cl_float2), im, 0, NULL, &ev_writ);

读取大小为width * height * 64位-您将超出数组范围。将您的cv::Mat转换为适当的类型或更改读取大小。

关于opencv - 将OpenCV mat传递给OpenCL内核以执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31436611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com