我以不同的方式问我的问题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;
}
答案 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。