@ -661,7 +661,7 @@ getThreshVal_Otsu_8u( const Mat& _src )
return max_val ;
}
class ThresholdRunner
class ThresholdRunner : public ParallelLoopBody
{
public :
ThresholdRunner ( Mat _src , Mat _dst , int _nStripes , double _thresh , double _maxval , int _thresholdType )
@ -676,10 +676,11 @@ public:
thresholdType = _thresholdType ;
}
void operator ( ) ( const Blocked Range& range ) const
void operator ( ) ( const Range & range ) const
{
int row0 = std : : min ( cvRound ( range . begin ( ) * src . rows / nStripes ) , src . rows ) ;
int row1 = std : : min ( cvRound ( range . end ( ) * src . rows / nStripes ) , src . rows ) ;
int row0 = std : : min ( cvRound ( range . start * src . rows / nStripes ) , src . rows ) ;
int row1 = range . end > = nStripes ? src . rows :
std : : min ( cvRound ( range . end * src . rows / nStripes ) , src . rows ) ;
/*if(0)
printf ( " Size = (%d, %d), range[%d,%d), row0 = %d, row1 = %d \n " ,
@ -756,12 +757,10 @@ double cv::threshold( InputArray _src, OutputArray _dst, double thresh, double m
}
else
src . copyTo ( dst ) ;
return thresh ;
}
else
{
parallel_for ( BlockedRange ( 0 , nStripes ) ,
ThresholdRunner ( src , dst , nStripes , ( uchar ) ithresh , ( uchar ) imaxval , type ) ) ;
}
thresh = ithresh ;
maxval = imaxval ;
}
else if ( src . depth ( ) = = CV_16S )
{
@ -785,21 +784,18 @@ double cv::threshold( InputArray _src, OutputArray _dst, double thresh, double m
}
else
src . copyTo ( dst ) ;
return thresh ;
}
else
{
parallel_for ( BlockedRange ( 0 , nStripes ) ,
ThresholdRunner ( src , dst , nStripes , ( short ) ithresh , ( short ) imaxval , type ) ) ;
}
thresh = ithresh ;
maxval = imaxval ;
}
else if ( src . depth ( ) = = CV_32F )
{
parallel_for ( BlockedRange ( 0 , nStripes ) ,
ThresholdRunner ( src , dst , nStripes , ( float ) thresh , ( float ) maxval , type ) ) ;
}
;
else
CV_Error ( CV_StsUnsupportedFormat , " " ) ;
parallel_for_ ( Range ( 0 , nStripes ) ,
ThresholdRunner ( src , dst , nStripes , thresh , maxval , type ) ) ;
return thresh ;
}