|
41 | 41 | //M*/
|
42 | 42 |
|
43 | 43 | #include "precomp.hpp"
|
| 44 | +#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) |
| 45 | +static IppStatus sts = ippInit(); |
| 46 | +#endif |
44 | 47 |
|
45 | 48 | namespace cv
|
46 | 49 | {
|
@@ -234,6 +237,53 @@ void cv::integral( InputArray _src, OutputArray _sum, OutputArray _sqsum, Output
|
234 | 237 | if( sdepth <= 0 )
|
235 | 238 | sdepth = depth == CV_8U ? CV_32S : CV_64F;
|
236 | 239 | sdepth = CV_MAT_DEPTH(sdepth);
|
| 240 | + |
| 241 | +#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7) |
| 242 | + if( ( depth == CV_8U ) && ( !_tilted.needed() ) ) |
| 243 | + { |
| 244 | + if( sdepth == CV_32F ) |
| 245 | + { |
| 246 | + if( cn == 1 ) |
| 247 | + { |
| 248 | + IppiSize srcRoiSize = ippiSize( src.cols, src.rows ); |
| 249 | + _sum.create( isize, CV_MAKETYPE( sdepth, cn ) ); |
| 250 | + sum = _sum.getMat(); |
| 251 | + if( _sqsum.needed() ) |
| 252 | + { |
| 253 | + _sqsum.create( isize, CV_MAKETYPE( CV_64F, cn ) ); |
| 254 | + sqsum = _sqsum.getMat(); |
| 255 | + ippiSqrIntegral_8u32f64f_C1R( (const Ipp8u*)src.data, src.step, (Ipp32f*)sum.data, sum.step, (Ipp64f*)sqsum.data, sqsum.step, srcRoiSize, 0, 0 ); |
| 256 | + } |
| 257 | + else |
| 258 | + { |
| 259 | + ippiIntegral_8u32f_C1R( (const Ipp8u*)src.data, src.step, (Ipp32f*)sum.data, sum.step, srcRoiSize, 0 ); |
| 260 | + } |
| 261 | + return; |
| 262 | + } |
| 263 | + } |
| 264 | + if( sdepth == CV_32S ) |
| 265 | + { |
| 266 | + if( cn == 1 ) |
| 267 | + { |
| 268 | + IppiSize srcRoiSize = ippiSize( src.cols, src.rows ); |
| 269 | + _sum.create( isize, CV_MAKETYPE( sdepth, cn ) ); |
| 270 | + sum = _sum.getMat(); |
| 271 | + if( _sqsum.needed() ) |
| 272 | + { |
| 273 | + _sqsum.create( isize, CV_MAKETYPE( CV_64F, cn ) ); |
| 274 | + sqsum = _sqsum.getMat(); |
| 275 | + ippiSqrIntegral_8u32s64f_C1R( (const Ipp8u*)src.data, src.step, (Ipp32s*)sum.data, sum.step, (Ipp64f*)sqsum.data, sqsum.step, srcRoiSize, 0, 0 ); |
| 276 | + } |
| 277 | + else |
| 278 | + { |
| 279 | + ippiIntegral_8u32s_C1R( (const Ipp8u*)src.data, src.step, (Ipp32s*)sum.data, sum.step, srcRoiSize, 0 ); |
| 280 | + } |
| 281 | + return; |
| 282 | + } |
| 283 | + } |
| 284 | + } |
| 285 | +#endif |
| 286 | + |
237 | 287 | _sum.create( isize, CV_MAKETYPE(sdepth, cn) );
|
238 | 288 | sum = _sum.getMat();
|
239 | 289 |
|
|
0 commit comments