From d192117e866b80ba7c4418391ba767d45baa9f28 Mon Sep 17 00:00:00 2001 From: Marina Kolpakova Date: Wed, 6 Jun 2012 10:39:42 +0000 Subject: [PATCH] GPU resize with INTER_AREA --- modules/gpu/src/cuda/resize.cu | 65 +++++++++- .../gpu/src/opencv2/gpu/device/filters.hpp | 111 +++++++++++++++++- .../gpu/src/opencv2/gpu/device/vec_traits.hpp | 4 +- modules/gpu/src/resize.cpp | 3 +- modules/gpu/test/test_resize.cpp | 48 +++++++- modules/gpu/test/utility.hpp | 2 +- modules/imgproc/src/imgwarp.cpp | 34 +++--- modules/imgproc/test/test_imgwarp.cpp | 34 ++++++ 8 files changed, 273 insertions(+), 28 deletions(-) diff --git a/modules/gpu/src/cuda/resize.cu b/modules/gpu/src/cuda/resize.cu index 732b0f775c..813bced7df 100644 --- a/modules/gpu/src/cuda/resize.cu +++ b/modules/gpu/src/cuda/resize.cu @@ -46,6 +46,7 @@ #include "opencv2/gpu/device/vec_math.hpp" #include "opencv2/gpu/device/saturate_cast.hpp" #include "opencv2/gpu/device/filters.hpp" +# include namespace cv { namespace gpu { namespace device { @@ -65,6 +66,17 @@ namespace cv { namespace gpu { namespace device } } + template __global__ void resize_area(const Ptr2D src, float fx, float fy, DevMem2D_ dst) + { + const int x = blockDim.x * blockIdx.x + threadIdx.x; + const int y = blockDim.y * blockIdx.y + threadIdx.y; + + if (x < dst.cols && y < dst.rows) + { + dst(y, x) = saturate_cast(src(y, x)); + } + } + template