版主你好
我在对一幅二值图像做膨胀运算,做膨胀运算后,膨胀运算后的图像数据还是个二值图像,像素值只有0和255,准备用原子函数来统计图像像素不为0的个数,但是在用原子函数的时候出现了问题,找了半天也没找到问题出在哪,请帮我看看问题出在哪了,kernel代码如下
global void Dilationkernel(uchardev_Image,int width,int height,uchardev_Dilation_Image,intdev_counterNonZero)
{
int x=threadIdx.x+blockIdx.xblockDim.x;
int y=threadIdx.y+blockIdx.y*blockDim.y;
uchar flag=1;
int tid=y*width+x;
if(x>0&&x<width-1&&y>0&&y<height-1)
{
for(int i=-1;i<2;i++)
{
int bid=(x+i)+y*width;
if(dev_Image[bid]==255)
{
flag=0;
break;
}
}
__syncthreads();
if(flag==0)
{
dev_Dilation_Image[tid]=255;
atomicAdd(dev_counterNonZero,1);//dev_counterNonZero是个int型变量,写成了指针的形式
}
else
{
dev_Dilation_Image[tid]=0;
}
}
__syncthreads();
}