From baf7795efbbeeed20fc8c2c465edfc6cc83a4d03 Mon Sep 17 00:00:00 2001 From: aaron0769 Date: Thu, 18 Apr 2013 17:02:36 +0800 Subject: [PATCH 1/2] Modify newPoints() function to ensure safe ROI Adding the condition to make sure top-left and bottom-right corners are inside the image captured (no smaller than 0 and no bigger than the resolution of the webcam). --- OpenCV/C++/sift_tracker.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/OpenCV/C++/sift_tracker.cpp b/OpenCV/C++/sift_tracker.cpp index 0580827..1ae0a74 100644 --- a/OpenCV/C++/sift_tracker.cpp +++ b/OpenCV/C++/sift_tracker.cpp @@ -243,11 +243,20 @@ vector getDiff(Point cen, double rad) /* get new points of the bounding box */ void newPoints(vector diff, Point cen, double rad) { - printf("rad = %lf\tcen=(%d, %d)\n",rad, cen.x, cen.y); - printf("%f %f %f %f\n",diff[0], diff[1], diff[2], diff[3]); - point1.x = cen.x - rad - diff[0]; - point1.y = cen.y - rad - diff[1]; - point2.x = cen.x + rad + diff[2]; - point2.y = cen.y + rad + diff[3]; - printf("(%d, %d), (%d, %d)\n", point1.x, point1.y, point2.x, point2.y); +printf("rad = %lf\tcen=(%d, %d)\n",rad, cen.x, cen.y); +printf("%f %f %f %f\n",diff[0], diff[1], diff[2], diff[3]); + +point1.x = cen.x - rad - diff[0] >= 0 ? cen.x - rad - diff[0]:0; //make sure the value is within the img +point1.x = cen.x - rad - diff[0] <= img.cols ? cen.x - rad - diff[0]:img.cols; + +point1.y = cen.y - rad - diff[1] >= 0 ? cen.y - rad - diff[1]:0; +point1.y = cen.y - rad - diff[1] <= img.rows ? cen.y - rad - diff[1]:img.rows; + +point2.x = cen.x + rad + diff[2] >= 0 ? cen.x + rad + diff[2]:0; +point2.x = cen.x + rad + diff[2] <= img.cols ? cen.x + rad + diff[2]:img.cols; + +point2.y = cen.y + rad + diff[3] >= 0 ? cen.y + rad + diff[3]:0; +point2.y = cen.y + rad + diff[3] <= img.rows ? cen.y + rad + diff[3]:img.rows; + +printf("(%d, %d), (%d, %d)\n", point1.x, point1.y, point2.x, point2.y); } From 9cdc6c992c764268dd922f1da23645805973a1a9 Mon Sep 17 00:00:00 2001 From: aaron0769 Date: Thu, 18 Apr 2013 23:08:46 +0800 Subject: [PATCH 2/2] Indenting the code in newPoints() --- OpenCV/C++/sift_tracker.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/OpenCV/C++/sift_tracker.cpp b/OpenCV/C++/sift_tracker.cpp index 1ae0a74..2f67d30 100644 --- a/OpenCV/C++/sift_tracker.cpp +++ b/OpenCV/C++/sift_tracker.cpp @@ -243,20 +243,20 @@ vector getDiff(Point cen, double rad) /* get new points of the bounding box */ void newPoints(vector diff, Point cen, double rad) { -printf("rad = %lf\tcen=(%d, %d)\n",rad, cen.x, cen.y); -printf("%f %f %f %f\n",diff[0], diff[1], diff[2], diff[3]); - -point1.x = cen.x - rad - diff[0] >= 0 ? cen.x - rad - diff[0]:0; //make sure the value is within the img -point1.x = cen.x - rad - diff[0] <= img.cols ? cen.x - rad - diff[0]:img.cols; - -point1.y = cen.y - rad - diff[1] >= 0 ? cen.y - rad - diff[1]:0; -point1.y = cen.y - rad - diff[1] <= img.rows ? cen.y - rad - diff[1]:img.rows; - -point2.x = cen.x + rad + diff[2] >= 0 ? cen.x + rad + diff[2]:0; -point2.x = cen.x + rad + diff[2] <= img.cols ? cen.x + rad + diff[2]:img.cols; - -point2.y = cen.y + rad + diff[3] >= 0 ? cen.y + rad + diff[3]:0; -point2.y = cen.y + rad + diff[3] <= img.rows ? cen.y + rad + diff[3]:img.rows; - -printf("(%d, %d), (%d, %d)\n", point1.x, point1.y, point2.x, point2.y); + printf("rad = %lf\tcen=(%d, %d)\n",rad, cen.x, cen.y); + printf("%f %f %f %f\n",diff[0], diff[1], diff[2], diff[3]); + + point1.x = cen.x - rad - diff[0] >= 0 ? cen.x - rad - diff[0]:0; + point1.x = cen.x - rad - diff[0] <= img.cols ? cen.x - rad - diff[0]:img.cols; + + point1.y = cen.y - rad - diff[1] >= 0 ? cen.y - rad - diff[1]:0; + point1.y = cen.y - rad - diff[1] <= img.rows ? cen.y - rad - diff[1]:img.rows; + + point2.x = cen.x + rad + diff[2] >= 0 ? cen.x + rad + diff[2]:0; + point2.x = cen.x + rad + diff[2] <= img.cols ? cen.x + rad + diff[2]:img.cols; + + point2.y = cen.y + rad + diff[3] >= 0 ? cen.y + rad + diff[3]:0; + point2.y = cen.y + rad + diff[3] <= img.rows ? cen.y + rad + diff[3]:img.rows; + + printf("(%d, %d), (%d, %d)\n", point1.x, point1.y, point2.x, point2.y); }