Opencv OpenCL";阅读“U imageui”;始终返回0
我已经编写了一个简单的OpenCL程序,目标是使用OpenCLImage2D结构复制输入图像。这似乎是一项简单的工作,但我一直在努力 内核有“read_imageui”,它总是返回零值。输入图像为全白色jpeg图像 图像加载是使用OpenCV imread完成的 以下是内核: 以下是主机代码: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");
它输出白色图像。这意味着我使用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()));