fixed crashes in camshiftdemo sample
authorVadim Pisarevsky <no@email>
Sun, 28 Nov 2010 19:44:01 +0000 (19:44 +0000)
committerVadim Pisarevsky <no@email>
Sun, 28 Nov 2010 19:44:01 +0000 (19:44 +0000)
modules/core/src/drawing.cpp
modules/video/src/camshift.cpp

index be1e013dba4713a0b7783ece63fcbf6907de6395..7ad66a37135caad1c174a04bbb69a198732c6b7a 100644 (file)
@@ -892,7 +892,7 @@ EllipseEx( Mat& img, Point center, Size axes,
            int angle, int arc_start, int arc_end,
            const void* color, int thickness, int line_type )
 {
-    CV_Assert( axes.width >= 0 && axes.height >= 0 );
+    axes.width = std::abs(axes.width), axes.height = std::abs(axes.height);
     int delta = (std::max(axes.width,axes.height)+(XY_ONE>>1))>>XY_SHIFT;
     delta = delta < 3 ? 90 : delta < 10 ? 30 : delta < 15 ? 18 : 5;
 
index 7b090cbabff2ed1bb108dcb9aa06bb5cfdcb621c..908922e51560d2322f99dcea2c228713d5b6c790 100644 (file)
@@ -80,9 +80,7 @@ cvMeanShift( const void* imgProb, CvRect windowIn,
     if( windowIn.height <= 0 || windowIn.width <= 0 )
         CV_Error( CV_StsBadArg, "Input window has non-positive sizes" );
 
-    if( windowIn.x < 0 || windowIn.x + windowIn.width > mat->cols ||
-        windowIn.y < 0 || windowIn.y + windowIn.height > mat->rows )
-        CV_Error( CV_StsBadArg, "Initial window is not inside the image ROI" );
+    windowIn = cv::Rect(windowIn) & cv::Rect(0, 0, mat->cols, mat->rows);
 
     criteria = cvCheckTermCriteria( criteria, 1., 100 );
     eps = cvRound( criteria.epsilon * criteria.epsilon );
@@ -91,7 +89,8 @@ cvMeanShift( const void* imgProb, CvRect windowIn,
     {
         int dx, dy, nx, ny;
         double inv_m00;
-
+        cur_rect = cv::Rect(cur_rect) & cv::Rect(0, 0, mat->cols, mat->rows);
+        
         cvGetSubRect( mat, &cur_win, cur_rect ); 
         cvMoments( &cur_win, &moments );