Merge pull request #6148 from Aravind-Suresh:cv-cuda-reduce-bug-fix

This commit is contained in:
Alexander Alekhin 2016-02-29 19:07:05 +00:00
commit 318671d9b5
5 changed files with 6 additions and 19 deletions

View File

@ -368,6 +368,8 @@ PERF_TEST_P(Sz_Depth_Cn_Code_Dim, Reduce,
TEST_CYCLE() cv::cuda::reduce(d_src, dst, dim, reduceOp, CV_32F); TEST_CYCLE() cv::cuda::reduce(d_src, dst, dim, reduceOp, CV_32F);
dst = dst.reshape(dst.channels(), 1);
CUDA_SANITY_CHECK(dst); CUDA_SANITY_CHECK(dst);
} }
else else

View File

@ -137,7 +137,7 @@ void cv::cuda::reduce(InputArray _src, OutputArray _dst, int dim, int reduceOp,
if (dtype < 0) if (dtype < 0)
dtype = src.depth(); dtype = src.depth();
GpuMat dst = getOutputMat(_dst, 1, dim == 0 ? src.cols : src.rows, CV_MAKE_TYPE(CV_MAT_DEPTH(dtype), src.channels()), stream); GpuMat dst = getOutputMat(_dst, dim == 0 ? 1 : src.rows, dim == 0 ? src.cols : 1, CV_MAKE_TYPE(CV_MAT_DEPTH(dtype), src.channels()), stream);
if (dim == 0) if (dim == 0)
{ {

View File

@ -877,14 +877,11 @@ CUDA_TEST_P(Reduce, Cols)
{ {
cv::Mat src = randomMat(size, type); cv::Mat src = randomMat(size, type);
cv::cuda::GpuMat dst = createMat(cv::Size(src.rows, 1), dst_type, useRoi); cv::cuda::GpuMat dst;
cv::cuda::reduce(loadMat(src, useRoi), dst, 1, reduceOp, dst_depth); cv::cuda::reduce(loadMat(src, useRoi), dst, 1, reduceOp, dst_depth);
cv::Mat dst_gold; cv::Mat dst_gold;
cv::reduce(src, dst_gold, 1, reduceOp, dst_depth); cv::reduce(src, dst_gold, 1, reduceOp, dst_depth);
dst_gold.cols = dst_gold.rows;
dst_gold.rows = 1;
dst_gold.step = dst_gold.cols * dst_gold.elemSize();
EXPECT_MAT_NEAR(dst_gold, dst, dst_depth < CV_32F ? 0.0 : 0.02); EXPECT_MAT_NEAR(dst_gold, dst, dst_depth < CV_32F ? 0.0 : 0.02);
} }

View File

@ -182,7 +182,7 @@ __host__ void gridReduceToColumn_(const SrcPtr& src, GpuMat_<ResType>& dst, cons
CV_Assert( getRows(mask) == rows && getCols(mask) == cols ); CV_Assert( getRows(mask) == rows && getCols(mask) == cols );
dst.create(1, rows); cuda::createContinuous(rows, 1, dst.type(), dst);
grid_reduce_to_vec_detail::reduceToColumn<Reductor, Policy>(shrinkPtr(src), grid_reduce_to_vec_detail::reduceToColumn<Reductor, Policy>(shrinkPtr(src),
dst[0], dst[0],
@ -197,7 +197,7 @@ __host__ void gridReduceToColumn_(const SrcPtr& src, GpuMat_<ResType>& dst, Stre
const int rows = getRows(src); const int rows = getRows(src);
const int cols = getCols(src); const int cols = getCols(src);
dst.create(1, rows); cuda::createContinuous(rows, 1, dst.type(), dst);
grid_reduce_to_vec_detail::reduceToColumn<Reductor, Policy>(shrinkPtr(src), grid_reduce_to_vec_detail::reduceToColumn<Reductor, Policy>(shrinkPtr(src),
dst[0], dst[0],

View File

@ -228,9 +228,6 @@ TEST(ReduceToColumn, Sum)
Mat dst_gold; Mat dst_gold;
cv::reduce(src, dst_gold, 1, REDUCE_SUM, CV_32S); cv::reduce(src, dst_gold, 1, REDUCE_SUM, CV_32S);
dst_gold.cols = dst_gold.rows;
dst_gold.rows = 1;
dst_gold.step = dst_gold.cols * dst_gold.elemSize();
EXPECT_MAT_NEAR(dst_gold, dst, 0.0); EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
} }
@ -247,9 +244,6 @@ TEST(ReduceToColumn, Avg)
Mat dst_gold; Mat dst_gold;
cv::reduce(src, dst_gold, 1, REDUCE_AVG, CV_32F); cv::reduce(src, dst_gold, 1, REDUCE_AVG, CV_32F);
dst_gold.cols = dst_gold.rows;
dst_gold.rows = 1;
dst_gold.step = dst_gold.cols * dst_gold.elemSize();
EXPECT_MAT_NEAR(dst_gold, dst, 1e-4); EXPECT_MAT_NEAR(dst_gold, dst, 1e-4);
} }
@ -266,9 +260,6 @@ TEST(ReduceToColumn, Min)
Mat dst_gold; Mat dst_gold;
cv::reduce(src, dst_gold, 1, REDUCE_MIN); cv::reduce(src, dst_gold, 1, REDUCE_MIN);
dst_gold.cols = dst_gold.rows;
dst_gold.rows = 1;
dst_gold.step = dst_gold.cols * dst_gold.elemSize();
EXPECT_MAT_NEAR(dst_gold, dst, 0.0); EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
} }
@ -285,9 +276,6 @@ TEST(ReduceToColumn, Max)
Mat dst_gold; Mat dst_gold;
cv::reduce(src, dst_gold, 1, REDUCE_MAX); cv::reduce(src, dst_gold, 1, REDUCE_MAX);
dst_gold.cols = dst_gold.rows;
dst_gold.rows = 1;
dst_gold.step = dst_gold.cols * dst_gold.elemSize();
EXPECT_MAT_NEAR(dst_gold, dst, 0.0); EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
} }