From affab4f1561971ad2b9707239d5f38b6b1eb3bb2 Mon Sep 17 00:00:00 2001 From: Jason Newton Date: Tue, 27 Aug 2013 00:34:22 -0700 Subject: [PATCH] correct range computations, it is difficult to do the more efficient single pass 3N/2 implementations correctly in this particular setting without costing more than they save --- modules/imgproc/src/connectedcomponents.cpp | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/modules/imgproc/src/connectedcomponents.cpp b/modules/imgproc/src/connectedcomponents.cpp index 4fee0aacd1..c3bf556d01 100644 --- a/modules/imgproc/src/connectedcomponents.cpp +++ b/modules/imgproc/src/connectedcomponents.cpp @@ -92,20 +92,10 @@ namespace cv{ } void operator()(int r, int c, int l){ int *row = &statsv.at(l, 0); - if(c > row[CC_STAT_WIDTH]){ - row[CC_STAT_WIDTH] = c; - }else{ - if(c < row[CC_STAT_LEFT]){ - row[CC_STAT_LEFT] = c; - } - } - if(r > row[CC_STAT_HEIGHT]){ - row[CC_STAT_HEIGHT] = r; - }else{ - if(r < row[CC_STAT_TOP]){ - row[CC_STAT_TOP] = r; - } - } + row[CC_STAT_LEFT] = MIN(row[CC_STAT_LEFT], c); + row[CC_STAT_WIDTH] = MAX(row[CC_STAT_WIDTH], c); + row[CC_STAT_TOP] = MIN(row[CC_STAT_TOP], r); + row[CC_STAT_HEIGHT] = MAX(row[CC_STAT_HEIGHT], r); row[CC_STAT_AREA]++; Point2ui64 &integral = integrals[l]; integral.x += c; @@ -114,9 +104,7 @@ namespace cv{ void finish(){ for(int l = 0; l < statsv.rows; ++l){ int *row = &statsv.at(l, 0); - row[CC_STAT_LEFT] = std::min(row[CC_STAT_LEFT], row[CC_STAT_WIDTH]); row[CC_STAT_WIDTH] = row[CC_STAT_WIDTH] - row[CC_STAT_LEFT] + 1; - row[CC_STAT_TOP] = std::min(row[CC_STAT_TOP], row[CC_STAT_HEIGHT]); row[CC_STAT_HEIGHT] = row[CC_STAT_HEIGHT] - row[CC_STAT_TOP] + 1; Point2ui64 &integral = integrals[l];