Fixed imgcodecs tests

- Imgcodecs_Image, write_imageseq - assuming JPEG images have losses
- Imgcodecs_Drawing, c_regression - replaced assert calls
- Imgcodecs_Drawing - exact comparison with reference image
pull/3361/head
Maksim Shabunin 10 years ago
parent e40567eaee
commit e85ae5f2f0
  1. 14
      modules/imgcodecs/test/test_drawing.cpp
  2. 9
      modules/imgcodecs/test/test_grfmt.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<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) );

@ -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);
}
}

Loading…
Cancel
Save