From: kdrobnyh Date: Wed, 10 Jul 2013 07:25:36 +0000 (+0400) Subject: Add IPP support to integral function X-Git-Tag: accepted/tizen/ivi/20140515.103456~1^2~648^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f8eb806565630c247827fa2ad2e344999574bcd1;p=profile%2Fivi%2Fopencv.git Add IPP support to integral function --- diff --git a/modules/imgproc/src/sumpixels.cpp b/modules/imgproc/src/sumpixels.cpp index b441970..4ee9417 100644 --- a/modules/imgproc/src/sumpixels.cpp +++ b/modules/imgproc/src/sumpixels.cpp @@ -41,6 +41,9 @@ //M*/ #include "precomp.hpp" +#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) +static IppStatus sts = ippInit(); +#endif namespace cv { @@ -234,6 +237,53 @@ void cv::integral( InputArray _src, OutputArray _sum, OutputArray _sqsum, Output if( sdepth <= 0 ) sdepth = depth == CV_8U ? CV_32S : CV_64F; sdepth = CV_MAT_DEPTH(sdepth); + +#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) + if( ( depth == CV_8U ) && ( !_tilted.needed() ) ) + { + if( sdepth == CV_32F ) + { + if( cn == 1 ) + { + IppiSize srcRoiSize = ippiSize( src.cols, src.rows ); + _sum.create( isize, CV_MAKETYPE( sdepth, cn ) ); + sum = _sum.getMat(); + if( _sqsum.needed() ) + { + _sqsum.create( isize, CV_MAKETYPE( CV_64F, cn ) ); + sqsum = _sqsum.getMat(); + ippiSqrIntegral_8u32f64f_C1R( (const Ipp8u*)src.data, src.step, (Ipp32f*)sum.data, sum.step, (Ipp64f*)sqsum.data, sqsum.step, srcRoiSize, 0, 0 ); + } + else + { + ippiIntegral_8u32f_C1R( (const Ipp8u*)src.data, src.step, (Ipp32f*)sum.data, sum.step, srcRoiSize, 0 ); + } + return; + } + } + if( sdepth == CV_32S ) + { + if( cn == 1 ) + { + IppiSize srcRoiSize = ippiSize( src.cols, src.rows ); + _sum.create( isize, CV_MAKETYPE( sdepth, cn ) ); + sum = _sum.getMat(); + if( _sqsum.needed() ) + { + _sqsum.create( isize, CV_MAKETYPE( CV_64F, cn ) ); + sqsum = _sqsum.getMat(); + ippiSqrIntegral_8u32s64f_C1R( (const Ipp8u*)src.data, src.step, (Ipp32s*)sum.data, sum.step, (Ipp64f*)sqsum.data, sqsum.step, srcRoiSize, 0, 0 ); + } + else + { + ippiIntegral_8u32s_C1R( (const Ipp8u*)src.data, src.step, (Ipp32s*)sum.data, sum.step, srcRoiSize, 0 ); + } + return; + } + } + } +#endif + _sum.create( isize, CV_MAKETYPE(sdepth, cn) ); sum = _sum.getMat();