MCPcopy Create free account
hub / github.com/creatale/node-dv / meanStdDev

Method meanStdDev

deps/opencv/modules/core/src/stat.cpp:696–882  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

694
695
696void cv::meanStdDev( InputArray _src, OutputArray _mean, OutputArray _sdv, InputArray _mask )
697{
698 Mat src = _src.getMat(), mask = _mask.getMat();
699 CV_Assert( mask.empty() || mask.type() == CV_8U );
700
701 int k, cn = src.channels(), depth = src.depth();
702
703#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
704 size_t total_size = src.total();
705 int rows = src.size[0], cols = (int)(total_size/rows);
706 if( src.dims == 2 || (src.isContinuous() && mask.isContinuous() && cols > 0 && (size_t)rows*cols == total_size) )
707 {
708 Ipp64f mean_temp[3];
709 Ipp64f stddev_temp[3];
710 Ipp64f *pmean = &mean_temp[0];
711 Ipp64f *pstddev = &stddev_temp[0];
712 Mat mean, stddev;
713 int dcn_mean = -1;
714 if( _mean.needed() )
715 {
716 if( !_mean.fixedSize() )
717 _mean.create(cn, 1, CV_64F, -1, true);
718 mean = _mean.getMat();
719 dcn_mean = (int)mean.total();
720 pmean = (Ipp64f *)mean.data;
721 }
722 int dcn_stddev = -1;
723 if( _sdv.needed() )
724 {
725 if( !_sdv.fixedSize() )
726 _sdv.create(cn, 1, CV_64F, -1, true);
727 stddev = _sdv.getMat();
728 dcn_stddev = (int)stddev.total();
729 pstddev = (Ipp64f *)stddev.data;
730 }
731 for( int c = cn; c < dcn_mean; c++ )
732 pmean[c] = 0;
733 for( int c = cn; c < dcn_stddev; c++ )
734 pstddev[c] = 0;
735 IppiSize sz = { cols, rows };
736 int type = src.type();
737 if( !mask.empty() )
738 {
739 typedef IppStatus (CV_STDCALL* ippiMaskMeanStdDevFuncC1)(const void *, int, void *, int, IppiSize, Ipp64f *, Ipp64f *);
740 ippiMaskMeanStdDevFuncC1 ippFuncC1 =
741 type == CV_8UC1 ? (ippiMaskMeanStdDevFuncC1)ippiMean_StdDev_8u_C1MR :
742 type == CV_16UC1 ? (ippiMaskMeanStdDevFuncC1)ippiMean_StdDev_16u_C1MR :
743 type == CV_32FC1 ? (ippiMaskMeanStdDevFuncC1)ippiMean_StdDev_32f_C1MR :
744 0;
745 if( ippFuncC1 )
746 {
747 if( ippFuncC1(src.data, (int)src.step[0], mask.data, (int)mask.step[0], sz, pmean, pstddev) >= 0 )
748 return;
749 }
750 typedef IppStatus (CV_STDCALL* ippiMaskMeanStdDevFuncC3)(const void *, int, void *, int, IppiSize, int, Ipp64f *, Ipp64f *);
751 ippiMaskMeanStdDevFuncC3 ippFuncC3 =
752 type == CV_8UC3 ? (ippiMaskMeanStdDevFuncC3)ippiMean_StdDev_8u_C3CMR :
753 type == CV_16UC3 ? (ippiMaskMeanStdDevFuncC3)ippiMean_StdDev_16u_C3CMR :

Callers

nothing calls this directly

Calls 15

getSumSqrTabFunction · 0.85
sqrtFunction · 0.85
neededMethod · 0.80
fixedSizeMethod · 0.80
minFunction · 0.70
maxFunction · 0.70
getMatMethod · 0.45
emptyMethod · 0.45
typeMethod · 0.45
channelsMethod · 0.45
depthMethod · 0.45
totalMethod · 0.45

Tested by

no test coverage detected