0

我问我的问题如何以 不同的方式在 jocl 中使用 t_sampler 了解像素颜色

const sampler_t smp = CLK_NORMALIZED_COORDS_FALSE | //Natural coordinates
                      CLK_ADDRESS_CLAMP | //Clamp to zeros
                      CLK_FILTER_NEAREST; //Don't interpolate

然后我用

int2 coord = (int2)(get_global_id(0), get_global_id(1));
    float4 pixel = read_imageui(input, smp, coord);

我的问题是:如何使用值像素来知道相关像素的颜色?

几天后我被困住了,我尝试了很多解决方案来解决这个问题,如果您需要任何澄清,我会回复。这是我的内核代码

const sampler_t smp = CLK_NORMALIZED_COORDS_FALSE | //Natural coordinates
                      CLK_ADDRESS_CLAMP | //Clamp to zeros
                      CLK_FILTER_NEAREST; //Don't interpolate
__kernel void basic(__read_only image2d_t input,__global float *result) 
{

   int gidX = get_global_id(0);
    int gidY = get_global_id(1);

int2 coord = (int2)(get_global_id(0), get_global_id(1));

int2 posIn = {gidX, gidY};

      float4 pixel = read_imagef(input, smp, posIn);
if ((pixel.x==0.0) && (pixel.y==0.0) && (pixel.z==0.0) ){

result[gidX]=1;
}  else result[gidX]=0;
    }
4

1 回答 1

0

使用读取像素read_imagef(我建议使用它而不是read_imageui,具体取决于图像格式,特别是因为在您的示例中您分配给 float4 变量;检查适用于每种图像格式的规范)。然后可以检查返回的 float4 组件。pixel.x是红色,pixel.y是绿色,pixel.z是蓝色,pixel.w是 alpha(如果源格式没有 alpha,则为 1.0f)。要检查黑色(正如您在问题主题中所问的那样),只需检查 .x 和 .y 和 .z 是否都是 0.0。

于 2016-07-28T21:11:40.627 回答