openCL中提供了大量可以在内核中运行的图像处理函数,主要包括:
(1)Read functiongs--图像读取函数;
(2)write functiongs-- 图像写入函数;
(3)Information functions-- 提供关于图像对象的信息;
图像读取函数是从图像对象中读取向量,他们各自的参数基本一样。 唯一的区别是函数返回的是浮点数向量还是整数向量,读取的是二维图像对象还是三维图像对象。 读取图像数据的内核函数:
1.float4 read_imagef(image2d_t img,sampler_t sampler, int2/float2 coord)--以float4型向量的形式读取二维图像在coord位置的颜色数据;
2.int4 read_imagei(image2d_t img,sampler_t sampler, int2/float2 coord)--以int4型向量的形式读取二维图像在coord位置的颜色数据;
3.uint4 read_imagui(image2d_t img,sampler_t sampler, int2/float2 coord)--以uint4型向量的形式读取二维图像在coord位置的颜色数据;
4.float4 read_imagef(image3d_t img,sampler_t sampler, int4/float4 coord)--以float4型向量的形式读取三维图像在coord位置的颜色数据;
5.int4 read_imagei(image3d_t img,sampler_t sampler, int4/float4 coord)--以int4型向量的形式读取三维图像在coord位置的颜色数据;
6.uint4 read_imagui(image3d_t img,sampler_t sampler, int4/float4 coord)--以uint4型向量的形式读取三维图像在coord位置的颜色数据;
一般二维图像使用image2d_t , 三维图像image3d_t。 如果图像对象是一个image2d_t类型,坐标的格式就必须是int2型或float2型。 如果图像对象是一个image3d_t类型,坐标的格式就必须是int4型或float4型。
其中的sampler_t是采样器对象: 创建了图像对象对象后,还需要额外的信息来告诉内核如何读取图像对象。这些额外的信息就是通过采样器对象来告诉内核的。 采样器对象可以在主机端创建,作为参数传递给内核,使用cl_sampler结构来表示主机端采样器对象;也可以在设备端直接声明使用,使用sampler_t结构来表示设备端采样器对象。 直接在内核代码中声明使用,代码如下:
const sampler_t sampler = sampler_properites;
其中sampler_properites为采样器属性值,用来告诉内核如何读取图像对象。需要注意的是设备端采样器对象的属性值与主机端采样器属性值书写有点小区别,详细见下表: 值得注意的是read_img{i|ui}: 过滤模式仅支持:
CLK_FILTER_NEAREST
规格化坐标必须是:
CLK_NORMALIZED_COORDS_FALSE
另外还有个图像对象和缓冲对象之间的拷贝函数:
clEnqueueCopyImageToBuffer()
clEnqueueCopyBufferToImage()
|