diff --git a/modules/gpu/include/opencv2/gpu.hpp b/modules/gpu/include/opencv2/gpu.hpp index 0c625de8ae..6605a58407 100644 --- a/modules/gpu/include/opencv2/gpu.hpp +++ b/modules/gpu/include/opencv2/gpu.hpp @@ -184,11 +184,6 @@ CV_EXPORTS void integralBuffered(const GpuMat& src, GpuMat& sum, GpuMat& buffer, //! supports source images of 8UC1 type only CV_EXPORTS void sqrIntegral(const GpuMat& src, GpuMat& sqsum, Stream& stream = Stream::Null()); -//! computes the standard deviation of integral images -//! supports only CV_32SC1 source type and CV_32FC1 sqr type -//! output will have CV_32FC1 type -CV_EXPORTS void rectStdDev(const GpuMat& src, const GpuMat& sqr, GpuMat& dst, const Rect& rect, Stream& stream = Stream::Null()); - //! computes Harris cornerness criteria at each image pixel CV_EXPORTS void cornerHarris(const GpuMat& src, GpuMat& dst, int blockSize, int ksize, double k, int borderType = BORDER_REFLECT101); CV_EXPORTS void cornerHarris(const GpuMat& src, GpuMat& dst, GpuMat& Dx, GpuMat& Dy, int blockSize, int ksize, double k, int borderType = BORDER_REFLECT101); diff --git a/modules/gpu/src/imgproc.cpp b/modules/gpu/src/imgproc.cpp index fa0ed03a76..a3c9694fa6 100644 --- a/modules/gpu/src/imgproc.cpp +++ b/modules/gpu/src/imgproc.cpp @@ -59,7 +59,6 @@ void cv::gpu::rotate(const GpuMat&, GpuMat&, Size, double, double, double, int, void cv::gpu::integral(const GpuMat&, GpuMat&, Stream&) { throw_no_cuda(); } void cv::gpu::integralBuffered(const GpuMat&, GpuMat&, GpuMat&, Stream&) { throw_no_cuda(); } void cv::gpu::sqrIntegral(const GpuMat&, GpuMat&, Stream&) { throw_no_cuda(); } -void cv::gpu::rectStdDev(const GpuMat&, const GpuMat&, GpuMat&, const Rect&, Stream&) { throw_no_cuda(); } void cv::gpu::evenLevels(GpuMat&, int, int, int) { throw_no_cuda(); } void cv::gpu::histEven(const GpuMat&, GpuMat&, int, int, int, Stream&) { throw_no_cuda(); } void cv::gpu::histEven(const GpuMat&, GpuMat&, GpuMat&, int, int, int, Stream&) { throw_no_cuda(); } @@ -628,36 +627,6 @@ void cv::gpu::sqrIntegral(const GpuMat& src, GpuMat& sqsum, Stream& s) cudaSafeCall( cudaDeviceSynchronize() ); } -////////////////////////////////////////////////////////////////////////////// -// rectStdDev - -void cv::gpu::rectStdDev(const GpuMat& src, const GpuMat& sqr, GpuMat& dst, const Rect& rect, Stream& s) -{ - CV_Assert(src.type() == CV_32SC1 && sqr.type() == CV_64FC1); - - dst.create(src.size(), CV_32FC1); - - NppiSize sz; - sz.width = src.cols; - sz.height = src.rows; - - NppiRect nppRect; - nppRect.height = rect.height; - nppRect.width = rect.width; - nppRect.x = rect.x; - nppRect.y = rect.y; - - cudaStream_t stream = StreamAccessor::getStream(s); - - NppStreamHandler h(stream); - - nppSafeCall( nppiRectStdDev_32s32f_C1R(src.ptr(), static_cast(src.step), sqr.ptr(), static_cast(sqr.step), - dst.ptr(), static_cast(dst.step), sz, nppRect) ); - - if (stream == 0) - cudaSafeCall( cudaDeviceSynchronize() ); -} - //////////////////////////////////////////////////////////////////////// // Histogram diff --git a/modules/gpuarithm/include/opencv2/gpuarithm.hpp b/modules/gpuarithm/include/opencv2/gpuarithm.hpp index 57d9abfbf5..5724cd53c7 100644 --- a/modules/gpuarithm/include/opencv2/gpuarithm.hpp +++ b/modules/gpuarithm/include/opencv2/gpuarithm.hpp @@ -274,6 +274,11 @@ CV_EXPORTS void reduce(const GpuMat& mtx, GpuMat& vec, int dim, int reduceOp, in //! applies fixed threshold to the image CV_EXPORTS double threshold(const GpuMat& src, GpuMat& dst, double thresh, double maxval, int type, Stream& stream = Stream::Null()); +//! computes the standard deviation of integral images +//! supports only CV_32SC1 source type and CV_32FC1 sqr type +//! output will have CV_32FC1 type +CV_EXPORTS void rectStdDev(const GpuMat& src, const GpuMat& sqr, GpuMat& dst, const Rect& rect, Stream& stream = Stream::Null()); + }} // namespace cv { namespace gpu { #endif /* __OPENCV_GPUARITHM_HPP__ */ diff --git a/modules/gpuarithm/src/matrix_reductions.cpp b/modules/gpuarithm/src/matrix_reductions.cpp index 027618dac1..dbb6c0945e 100644 --- a/modules/gpuarithm/src/matrix_reductions.cpp +++ b/modules/gpuarithm/src/matrix_reductions.cpp @@ -69,6 +69,7 @@ void cv::gpu::minMaxLoc(const GpuMat&, double*, double*, Point*, Point*, const G int cv::gpu::countNonZero(const GpuMat&) { throw_no_cuda(); return 0; } int cv::gpu::countNonZero(const GpuMat&, GpuMat&) { throw_no_cuda(); return 0; } void cv::gpu::reduce(const GpuMat&, GpuMat&, int, int, int, Stream&) { throw_no_cuda(); } +void cv::gpu::rectStdDev(const GpuMat&, const GpuMat&, GpuMat&, const Rect&, Stream&) { throw_no_cuda(); } #else @@ -696,4 +697,34 @@ void cv::gpu::reduce(const GpuMat& src, GpuMat& dst, int dim, int reduceOp, int } } +////////////////////////////////////////////////////////////////////////////// +// rectStdDev + +void cv::gpu::rectStdDev(const GpuMat& src, const GpuMat& sqr, GpuMat& dst, const Rect& rect, Stream& s) +{ + CV_Assert(src.type() == CV_32SC1 && sqr.type() == CV_64FC1); + + dst.create(src.size(), CV_32FC1); + + NppiSize sz; + sz.width = src.cols; + sz.height = src.rows; + + NppiRect nppRect; + nppRect.height = rect.height; + nppRect.width = rect.width; + nppRect.x = rect.x; + nppRect.y = rect.y; + + cudaStream_t stream = StreamAccessor::getStream(s); + + NppStreamHandler h(stream); + + nppSafeCall( nppiRectStdDev_32s32f_C1R(src.ptr(), static_cast(src.step), sqr.ptr(), static_cast(sqr.step), + dst.ptr(), static_cast(dst.step), sz, nppRect) ); + + if (stream == 0) + cudaSafeCall( cudaDeviceSynchronize() ); +} + #endif