Fixed imgcodecs tests
authorMaksim Shabunin <maksim.shabunin@itseez.com>
Thu, 23 Oct 2014 08:33:38 +0000 (12:33 +0400)
committerMaksim Shabunin <maksim.shabunin@itseez.com>
Thu, 23 Oct 2014 08:38:42 +0000 (12:38 +0400)
- Imgcodecs_Image, write_imageseq - assuming JPEG images have losses
- Imgcodecs_Drawing, c_regression - replaced assert calls
- Imgcodecs_Drawing - exact comparison with reference image

modules/imgcodecs/test/test_drawing.cpp
modules/imgcodecs/test/test_grfmt.cpp

index e4936f6..f4e157f 100644 (file)
@@ -75,11 +75,12 @@ void CV_DrawingTest::run( int )
     }
     else
     {
-        float err = (float)cvtest::norm( testImg, valImg, CV_RELATIVE_L1 );
-        float Eps = 0.9f;
+        // image should match exactly
+        float err = (float)cvtest::norm( testImg, valImg, NORM_L1 );
+        float Eps = 1;
         if( err > Eps)
         {
-            ts->printf( ts->LOG, "CV_RELATIVE_L1 between testImg and valImg is equal %f (larger than %f)\n", err, Eps );
+            ts->printf( ts->LOG, "NORM_L1 between testImg and valImg is equal %f (larger than %f)\n", err, Eps );
             ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY);
         }
         else
@@ -261,6 +262,7 @@ void CV_DrawingTest_C::draw( Mat& _img )
     polyline[3] = cvPoint(0, imgSize.height);
     CvPoint* pts = &polyline[0];
     int n = (int)polyline.size();
+    int actualSize = 0;
     cvFillPoly( &img, &pts, &n, 1, cvScalar(255,255,255) );
 
     CvPoint p1 = cvPoint(1,1), p2 = cvPoint(3,3);
@@ -290,7 +292,8 @@ void CV_DrawingTest_C::draw( Mat& _img )
     polyline.resize(9);
     pts = &polyline[0];
     n = (int)polyline.size();
-    assert( cvEllipse2Poly( cvPoint(430,180), cvSize(100,150), 30, 0, 150, &polyline[0], 20 ) == n );
+    actualSize = cvEllipse2Poly( cvPoint(430,180), cvSize(100,150), 30, 0, 150, &polyline[0], 20 );
+    CV_Assert(actualSize == n);
     cvPolyLine( &img, &pts, &n, 1, false, cvScalar(0,0,150), 4, CV_AA );
     n = 0;
     for( vector<CvPoint>::const_iterator it = polyline.begin(); n < (int)polyline.size()-1; ++it, n++ )
@@ -301,7 +304,8 @@ void CV_DrawingTest_C::draw( Mat& _img )
     polyline.resize(19);
     pts = &polyline[0];
     n = (int)polyline.size();
-    assert( cvEllipse2Poly( cvPoint(500,300), cvSize(50,80), 0, 0, 180, &polyline[0], 10 ) == n );
+    actualSize = cvEllipse2Poly( cvPoint(500,300), cvSize(50,80), 0, 0, 180, &polyline[0], 10 );
+    CV_Assert(actualSize == n);
     cvPolyLine( &img, &pts, &n, 1, true, Scalar(100,200,100), 20 );
     cvFillConvexPoly( &img, pts, n, cvScalar(0, 80, 0) );
 
index 79b79eb..451a3a1 100644 (file)
@@ -147,10 +147,13 @@ public:
                     CV_Assert(img.size() == img_test.size());
                     CV_Assert(img.type() == img_test.type());
 
-                    double n = cvtest::norm(img, img_test, NORM_L2);
-                    if ( n > 1.0)
+                    // JPEG format does not provide 100% accuracy
+                    // using fuzzy image comparison
+                    double n = cvtest::norm(img, img_test, NORM_L1);
+                    double expected = 0.05 * img.size().area();
+                    if ( n > expected)
                     {
-                        ts->printf(ts->LOG, "norm = %f \n", n);
+                        ts->printf(ts->LOG, "norm = %f > expected = %f \n", n, expected);
                         ts->set_failed_test_info(ts->FAIL_MISMATCH);
                     }
                 }