diff --git a/modules/imgcodecs/test/test_drawing.cpp b/modules/imgcodecs/test/test_drawing.cpp index e4936f63a0d86cbb6a9d23997728ab7bbcb86b83..f4e157fb20ffd7bb8744a6e069be59eefc630bf4 100644 --- a/modules/imgcodecs/test/test_drawing.cpp +++ b/modules/imgcodecs/test/test_drawing.cpp @@ -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::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) ); diff --git a/modules/imgcodecs/test/test_grfmt.cpp b/modules/imgcodecs/test/test_grfmt.cpp index 79b79eb61ea7466479f2280e72b2ce2faca09b2e..451a3a1e403162200751cae7e5b7d487b1c98d9d 100644 --- a/modules/imgcodecs/test/test_grfmt.cpp +++ b/modules/imgcodecs/test/test_grfmt.cpp @@ -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); } }