From 65a0587ce881e697bcfef7077297b6060b56c812 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Sat, 1 Sep 2018 12:38:57 +0000 Subject: [PATCH] imgproc(segmentation): don't increase mask NULL pointer Avoid manual address arithmetic --- modules/imgproc/src/segmentation.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/modules/imgproc/src/segmentation.cpp b/modules/imgproc/src/segmentation.cpp index b803770f12..b08d1b3ac0 100644 --- a/modules/imgproc/src/segmentation.cpp +++ b/modules/imgproc/src/segmentation.cpp @@ -407,27 +407,25 @@ void cv::pyrMeanShiftFiltering( InputArray _src, OutputArray _dst, cv::Size size = src.size(); const uchar* sptr = src.ptr(); int sstep = (int)src.step; - uchar* mask = 0; - int mstep = 0; uchar* dptr; int dstep; float sp = (float)(sp0 / (1 << level)); sp = MAX( sp, 1 ); + cv::Mat m; if( level < max_level ) { cv::Size size1 = dst_pyramid[level+1].size(); - cv::Mat m( size.height, size.width, CV_8UC1, mask0.ptr() ); + m = cv::Mat(size.height, size.width, CV_8UC1, mask0.ptr()); dstep = (int)dst_pyramid[level+1].step; dptr = dst_pyramid[level+1].ptr() + dstep + cn; - mstep = (int)m.step; - mask = m.ptr() + mstep; //cvResize( dst_pyramid[level+1], dst_pyramid[level], CV_INTER_CUBIC ); cv::pyrUp( dst_pyramid[level+1], dst_pyramid[level], dst_pyramid[level].size() ); m.setTo(cv::Scalar::all(0)); - for( i = 1; i < size1.height-1; i++, dptr += dstep - (size1.width-2)*3, mask += mstep*2 ) + for( i = 1; i < size1.height-1; i++, dptr += dstep - (size1.width-2)*3) { + uchar* mask = m.ptr(1 + i * 2); for( j = 1; j < size1.width-1; j++, dptr += cn ) { int c0 = dptr[0], c1 = dptr[1], c2 = dptr[2]; @@ -437,16 +435,16 @@ void cv::pyrMeanShiftFiltering( InputArray _src, OutputArray _dst, } cv::dilate( m, m, cv::Mat() ); - mask = m.ptr(); } dptr = dst_pyramid[level].ptr(); dstep = (int)dst_pyramid[level].step; for( i = 0; i < size.height; i++, sptr += sstep - size.width*3, - dptr += dstep - size.width*3, - mask += mstep ) + dptr += dstep - size.width*3 + ) { + uchar* mask = m.empty() ? NULL : m.ptr(i); for( j = 0; j < size.width; j++, sptr += 3, dptr += 3 ) { int x0 = j, y0 = i, x1, y1, iter;