设为首页 加入收藏

TOP

OpenCL:图像处理基础note
2018-10-06 21:34:58 】 浏览:66
Tags:OpenCL 图像处理 基础 note

虽然对于图像也可以把它的像素数据当做一般的缓存数据来处理,但是如果把它当做图像来处理有如下好处:


图像相关应用主要涉及两个数据类型,即图像对象采样器。图像对线用来保存主机和设备上的图像对象,而采样器则在设备接收数据时,说明如何读取这些颜色值


cl_mem clCreateImage2D()
cl_mem clCreateImage3D()


cl_image_format


cl_sampler clCreateSampler()


由于很多设备都是将图像对象保存在特定的内存中,因此image2d_t以及image3d_t数据的前面通常会有read_only或者write_only等修饰符。图像不能即可写又可读
图像数据作为内核的参数时,和普通的缓存对象不同,它不是指针参数,因为图像数据并不希望直接通过内存操作来访问数据。


根据khronos官网的说明,采样器其实就是一个uint类型(可以直接给内置cl读写函数传递标识位的组合来替代sampler_t,例如:float4 clr = read_imagef(img, CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST, (float2)(x, y));),通过bit-mode来说明坐标模式,超出边界的处理模式以及插值模式。在官方的sample中采用的是constant申明的模式,虽然也说了可以采用global声明,但这也许说明constant更好。
可以通过设置参数clSetKernelArg的方式来给内核传递采样器。但是更为方便的方式是在cl文件中,在内核函数之前创建一个sampler_t对象,如下case:


__constant sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE |
      CLK_ADDRESS_CLAMP | CLK_FILTER_NEAREST;


__kernel void simple_image(read_only image2d_t src_image,
                        write_only image2d_t dst_image) {


  /* Compute value to be subtracted from each pixel */
  uint offset = get_global_id(1) * 0x4000 + get_global_id(0) * 0x1000;


  /* Read pixel value */
  int2 coord = (int2)(get_global_id(0), get_global_id(1));
  uint4 pixel = read_imageui(src_image, sampler, coord);


  /* Subtract offset from pixel */
  pixel.x -= offset;


  /* Write new pixel value to output */
  write_imageui(dst_image, coord, pixel);
}


OpenCL的内置图像相关的函数主要包括三类:read_imageT读取类,write_imageT写入类以及get_image_X读取图像信息类。其中T表示数据类型,比如f,i,ui等,而X表示width,dim等图像信息


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python中类的定义与使用 下一篇在Android Studio上使用AddressSa..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目