将Mat(OpenCV)的数据保存在由指针定位的内存区域

将Mat(OpenCV)的数据保存在由指针定位的内存区域,opencv,pointers,opencl,mat,Opencv,Pointers,Opencl,Mat,我在共享内存上创建了一个内存对象,调用了以下OpenCL函数: cl_mem buffer_img_GAUSS_TEST = clCreateBuffer(context, CL_MEM_ALLOC_HOST_PTR, sizeof(uchar) * size_cols * size_rows,NULL,&status); 此函数的调用为我提供了指针: uchar *src_ptr; src_ptr = (uchar *)clEnqueueMapBuffer(cmdQueue, bu

我在共享内存上创建了一个内存对象,调用了以下OpenCL函数:

cl_mem buffer_img_GAUSS_TEST = clCreateBuffer(context, CL_MEM_ALLOC_HOST_PTR, sizeof(uchar) * size_cols * size_rows,NULL,&status);
此函数的调用为我提供了指针:

uchar *src_ptr;
src_ptr  = (uchar *)clEnqueueMapBuffer(cmdQueue, buffer_img_GAUSS_TEST, CL_TRUE, CL_MAP_READ, 0, sizeof(uchar) * size_cols* size_rows, 0, NULL, NULL, &status);
现在,我想通过以下OpenCV函数调用读取图像:

Mat img= imread( "scene.jpg", IMREAD_GRAYSCALE );
是否可以“说”图片的数据应该放在src_ptr指向的数据区域?缓冲区\u img\u GAUSS\u测试所定位的区域正好具有模板数据所需的大小

换言之: 我想替换这部分代码,它将数据从图像复制到src_指针指向的地址

memcpy ( src_ptr, img.data, sizeof(uchar) * img.cols * img.rows);
没有。 根据设计,不可能在指定的存储位置加载图像数据

正确的方法是使用memcpy(正如您所做的那样)。cv::Mat的移动语义尚未定义(至少我没有看到类似的内容,文档中也没有任何信息)。 另一种解决方案是提供指向img数据的指针(通过调用cv::Mat::data()),而不创建映像的副本,如果您使用的其他库中有这样的功能的话。在这种情况下,您应该实现某种共享所有权,并且在使用指向其数据的指针时不释放cv::Mat