level 1
大银永1Y
楼主
__device__ bool is_valid_box(uchar *left, int x, int y, int width, int height,int filterWidth, int winBox[])
{
for (int i = 0; i < filterWidth; i++)
{
for (int j = 0; j < filterWidth; j++)
{
// 不超出图像边界
int clamp_x = __min(__max(x + j - filterWidth / 2, 0), width - 1);
int clamp_y = __min(__max(y + i - filterWidth / 2, 0), height - 1);
// 结果计算
int num = left[clamp_y * width + clamp_x];
if (num <= 0)//跳过窗口内有值小于0的线程
return false;
}
}
for (int i = 0; i < filterWidth; i++)
{
for (int j = 0; j < filterWidth; j++)
{
int clamp_x = __min(__max(x + j - filterWidth / 2, 0), width - 1);
int clamp_y = __min(__max(y + i - filterWidth / 2, 0), height - 1);
// 结果计算
winBox[i* filterWidth + j] = left[clamp_y * width + clamp_x];
}
}
return true;
}
__global__ void BBB(uchar *right, int width, int height, int winBox[], int filterWidth, int lefty)
{
int x = threadIdx.x + blockDim.x*blockIdx.x;
int y = threadIdx.y + blockDim.y*blockIdx.y;
if (x >= width || y >= height)
{
return;
}
for (int i = 0; i < 9; i++)
{
printf("%d ", winBox[i]);//这里输出有0,有不为0
}
}
__global__ void AAA(uchar*left,uchar *right,int width,int height, int filterWidth)
{
int x = threadIdx.x + blockDim.x*blockIdx.x;
int y = threadIdx.y + blockDim.y*blockIdx.y;
if (x >= width || y >= height) {
return;
}
int winBox[9];
if (is_valid_box(left, x, y, width,height, filterWidth, winBox)==true)
{
for (int i = 0; i < 9; i++)
{
printf("%d ", winBox[i]); 这里输出全不为0
}
dim3 block(32, 32);
dim3 grid((width + 31) / 32, (height + 31) / 32);
BBB << < grid, block >> > (right, width, height, winBox, filterWidth, y);
}
}
#C++#
#cuda#
2023年11月26日 14点11分
1
{
for (int i = 0; i < filterWidth; i++)
{
for (int j = 0; j < filterWidth; j++)
{
// 不超出图像边界
int clamp_x = __min(__max(x + j - filterWidth / 2, 0), width - 1);
int clamp_y = __min(__max(y + i - filterWidth / 2, 0), height - 1);
// 结果计算
int num = left[clamp_y * width + clamp_x];
if (num <= 0)//跳过窗口内有值小于0的线程
return false;
}
}
for (int i = 0; i < filterWidth; i++)
{
for (int j = 0; j < filterWidth; j++)
{
int clamp_x = __min(__max(x + j - filterWidth / 2, 0), width - 1);
int clamp_y = __min(__max(y + i - filterWidth / 2, 0), height - 1);
// 结果计算
winBox[i* filterWidth + j] = left[clamp_y * width + clamp_x];
}
}
return true;
}
__global__ void BBB(uchar *right, int width, int height, int winBox[], int filterWidth, int lefty)
{
int x = threadIdx.x + blockDim.x*blockIdx.x;
int y = threadIdx.y + blockDim.y*blockIdx.y;
if (x >= width || y >= height)
{
return;
}
for (int i = 0; i < 9; i++)
{
printf("%d ", winBox[i]);//这里输出有0,有不为0
}
}
__global__ void AAA(uchar*left,uchar *right,int width,int height, int filterWidth)
{
int x = threadIdx.x + blockDim.x*blockIdx.x;
int y = threadIdx.y + blockDim.y*blockIdx.y;
if (x >= width || y >= height) {
return;
}
int winBox[9];
if (is_valid_box(left, x, y, width,height, filterWidth, winBox)==true)
{
for (int i = 0; i < 9; i++)
{
printf("%d ", winBox[i]); 这里输出全不为0
}
dim3 block(32, 32);
dim3 grid((width + 31) / 32, (height + 31) / 32);
BBB << < grid, block >> > (right, width, height, winBox, filterWidth, y);
}
}
#C++#
#cuda#