Opencv OpenCL";阅读“U imageui”;始终返回0

Opencv OpenCL";阅读“U imageui”;始终返回0,opencv,opencl,Opencv,Opencl,我已经编写了一个简单的OpenCL程序,目标是使用OpenCLImage2D结构复制输入图像。这似乎是一项简单的工作,但我一直在努力 内核有“read_imageui”,它总是返回零值。输入图像为全白色jpeg图像 图像加载是使用OpenCV imread完成的 以下是内核: 以下是主机代码: 它输出白色图像。这意味着我使用read_图像的方式有问题,它与Mat copy构造函数上的“引用计数”有关 如果不使用 Mat white = imread("white_small.jpg");

我已经编写了一个简单的OpenCL程序,目标是使用OpenCLImage2D结构复制输入图像。这似乎是一项简单的工作,但我一直在努力

内核有“read_imageui”,它总是返回零值。输入图像为全白色jpeg图像

图像加载是使用OpenCV imread完成的

以下是内核:

以下是主机代码:


它输出白色图像。这意味着我使用read_图像的方式有问题,它与Mat copy构造函数上的“引用计数”有关

如果不使用

Mat white = imread("white_small.jpg");

    cvtColor(white, white, CV_BGR2RGBA);

    //white.convertTo(white,CV_8UC4);
    Mat out = Mat(white);
将输出矩阵“out”初始化为

那么它工作得很好

我无法完全理解到底是什么导致了它,但我知道这是由于Mat copy构造函数在用作第一个语法时的“引用计数”造成的。

写入时:

Mat out = Mat(white);
它就像是将
white
复制到
out
。Bot white.data和out.data指针将指向相同的内存,引用计数将增加。因此,当您调用
out.setTo
时,
white
Mat也会看到相同的变化。声明如下可能是个好主意:

Mat out = Mat(white.size,CV_8UC(white.channels()));

我在英特尔i5上运行它,Ubuntu 14.04图像采样器可能不适用于jpeg格式,除非gpu支持,因为它是压缩的。就我所知,只有纹理。
Mat
是从文件中读取未更改的字节还是解密的像素数据?我认为imread返回解码图像。因此mat.data指向解码图像数据。底层图像数据的表示形式是什么?您能检查一下
白色.步骤中的值吗
,如果该步骤中的值大于
宽度*像素大小
,则可以在创建图像时将其用作基音。
Mat white = imread("white_small.jpg");

    cvtColor(white, white, CV_BGR2RGBA);

    //white.convertTo(white,CV_8UC4);
    Mat out = Mat(white);
Mat out = Mat(white.size,CV_8UC4)
Mat out = Mat(white);
Mat out = Mat(white.size,CV_8UC(white.channels()));