added test for gpu:columnSum

This commit is contained in:
Alexey Spizhevoy 2010-12-08 16:51:12 +00:00
parent fa322bf46f
commit 9801d07a46
2 changed files with 58 additions and 5 deletions

View File

@ -723,16 +723,18 @@ namespace cv { namespace gpu { namespace imgproc
{
int x = blockIdx.x * blockDim.x + threadIdx.x;
const float* src_data = (const float*)src.data + x;
float* dst_data = (float*)dst.data + x;
if (x < cols)
{
const unsigned char* src_data = src.data + x * sizeof(float);
unsigned char* dst_data = dst.data + x * sizeof(float);
float sum = 0.f;
for (int y = 0; y < rows; ++y)
{
sum += src_data[y];
dst_data[y] = sum;
sum += *(const float*)src_data;
*(float*)dst_data = sum;
src_data += src.step;
dst_data += dst.step;
}
}
}

View File

@ -775,6 +775,56 @@ struct CV_GpuCornerMinEigenValTest: CvTest
}
};
struct CV_GpuColumnSumTest: CvTest
{
CV_GpuColumnSumTest(): CvTest("GPU-ColumnSumTest", "columnSum") {}
void run(int)
{
try
{
int n = 375;
int m = 1072;
Mat src(n, m, CV_32F);
RNG rng;
rng.fill(src, RNG::UNIFORM, Scalar(0), Scalar(1));
Mat dst_gold, dst2_gold;
integral(src, dst_gold, dst2_gold);
GpuMat dsrc(src);
GpuMat buf;
GpuMat dst;
columnSum(dsrc, buf);
transpose(buf, dst);
columnSum(dst, buf);
transpose(buf, dst);
Mat dst_ = dst;
for (int i = 0; i < dst_.rows; ++i)
{
const double* dst_gold_data = (const double*)dst_gold.ptr(i + 1);
for (int j = 0; j < dst_.cols; ++j)
{
float a = (float)dst_gold_data[j + 1];
float b = dst_.at<float>(i, j);
if (fabs(a - b) > 0.5f)
{
ts->printf(CvTS::CONSOLE, "%d %d %f %f\n", i, j, a, b);
ts->set_failed_test_info(CvTS::FAIL_INVALID_OUTPUT);
return;
}
}
}
}
catch (const Exception& e)
{
if (!check_and_treat_gpu_exception(e, ts)) throw;
return;
}
}
};
/////////////////////////////////////////////////////////////////////////////
/////////////////// tests registration /////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
@ -794,4 +844,5 @@ CV_GpuCvtColorTest CV_GpuCvtColor_test;
CV_GpuHistogramsTest CV_GpuHistograms_test;
CV_GpuCornerHarrisTest CV_GpuCornerHarris_test;
CV_GpuCornerMinEigenValTest CV_GpuCornerMinEigenVal_test;
CV_GpuColumnSumTest CV_GpuColumnSum_test;