diff --git a/modules/optim/src/denoise_tvl1.cpp b/modules/optim/src/denoise_tvl1.cpp index b11ebc0587..a2068baba7 100644 --- a/modules/optim/src/denoise_tvl1.cpp +++ b/modules/optim/src/denoise_tvl1.cpp @@ -18,6 +18,21 @@ namespace cv{namespace optim{ double _scale; }; +#ifndef OPENCV_NOSTL + using std::transform; +#else + template + static OutputIterator transform (InputIterator first1, InputIterator last1, InputIterator2 first2, + OutputIterator result, BinaryOperator binary_op) + { + while (first1 != last1) + { + *result = binary_op(*first1, *first2); + ++result; ++first1; ++first2; + } + return result; + } +#endif void denoise_TVL1(const std::vector& observations,Mat& result, double lambda, int niters){ CV_Assert(observations.size()>0 && niters>0 && lambda>0); @@ -68,7 +83,7 @@ namespace cv{namespace optim{ //Rs = clip(Rs + sigma*(X-imgs), -clambda, clambda) for(count=0;count<(int)Rs.size();count++){ - std::transform,MatConstIterator_,MatIterator_,AddFloatToCharScaled>( + transform,MatConstIterator_,MatIterator_,AddFloatToCharScaled>( Rs[count].begin(),Rs[count].end(),observations[count].begin(), Rs[count].begin(),AddFloatToCharScaled(-sigma/255.0)); Rs[count]+=sigma*X;