2016-07-25 30 views
0

请问以不同的方式 我的问题how to know pixel color using t_sampler in jocl我想konw如果一个像素是黑色或白色知道我是在我的内核使用t_sampler黑怎么知道的像素颜色是从浮子4

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

我不明白你的配色方案,你能向我解释我怎么知道它。有没有它的功能? –

+0

试试Google。我会帮你的。例如。 https://en.wikipedia.org/wiki/Color_scheme根据所选的颜色模式,您的硬件将解释内存。 –

回答

0

阅读使用read_imagef像素(我推荐它,而不是read_imageui,取决于图像格式,尤其是在你的榜样,你要分配到一个个float4变量;检查其说明书适用于每种图像格式)。然后可以检查返回的float4组件。 pixel.x是红色,pixel.y是绿色,pixel.z是蓝色,pixel.w是alpha(如果源格式不具有alpha,则为1.0f)。要检查黑色(正如你问你的问题),只需检查.x和.y和.z都是0.0。

+0

谢谢,我试过了,但似乎它总是0.0您可以看到我的代码内核上面,我用了一个彩色图像,结果总是0.这里是我的内核代码我用read_imagef。你认为这个问题在哪里? –

+0

有没有解读read_imagef值的方法? –

+0

你如何启动内核(clEnqueueNDRangeKernel)?此外,你有一个竞争条件:多个工作项目将写入同一个“结果”位置(当gidX相同且gidY不同时)。尝试使用图像作为您的输出,并开始只复制像素值或交换红色和绿色,直到您得到的东西工作。有许多read_imagef示例。 – Dithermaster