如何知道浮点数4中的像素颜色是否为黑色

时间:2016-07-25 20:43:40

标签: java image-processing opencl jocl

我以不同的方式问我的问题how to know pixel color using t_sampler in 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;
    }

1 个答案:

答案 0 :(得分:0)

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