Modified the test of findChessboardCorners to check examples when there are no chessboards

This commit is contained in:
Ilya Lysenkov 2012-03-28 13:23:33 +00:00
parent f014fb0a0e
commit 7eab7c197d

View File

@ -151,6 +151,12 @@ void CV_ChessboardDetectorTest::run( int /*start_from */)
break; break;
} }
run_batch("negative_list.dat");
if (ts.get_err_code() != cvtest::TS::OK)
{
break;
}
run_batch("chessboard_list.dat"); run_batch("chessboard_list.dat");
if (ts.get_err_code() != cvtest::TS::OK) if (ts.get_err_code() != cvtest::TS::OK)
{ {
@ -224,17 +230,13 @@ void CV_ChessboardDetectorTest::run_batch( const string& filename )
} }
string filename = folder + (string)board_list[idx * 2 + 1]; string filename = folder + (string)board_list[idx * 2 + 1];
bool doesContatinChessboard;
Mat expected; Mat expected;
{ {
CvMat *u = (CvMat*)cvLoad( filename.c_str() ); FileStorage fs(filename, FileStorage::READ);
if(!u ) fs["corners"] >> expected;
{ fs["isFound"] >> doesContatinChessboard;
ts.printf( cvtest::TS::LOG, "one of chessboard corner files can't be read: %s\n", filename.c_str() ); fs.release();
ts.set_failed_test_info( cvtest::TS::FAIL_MISSING_TEST_DATA );
continue;
}
expected = Mat(u, true);
cvReleaseMat( &u );
} }
size_t count_exp = static_cast<size_t>(expected.cols * expected.rows); size_t count_exp = static_cast<size_t>(expected.cols * expected.rows);
Size pattern_size = expected.size(); Size pattern_size = expected.size();
@ -254,13 +256,17 @@ void CV_ChessboardDetectorTest::run_batch( const string& filename )
break; break;
} }
show_points( gray, Mat(), v, pattern_size, result ); show_points( gray, Mat(), v, pattern_size, result );
if( !result || v.size() != count_exp )
if( result ^ doesContatinChessboard || v.size() != count_exp )
{ {
ts.printf( cvtest::TS::LOG, "chessboard is not found in %s\n", img_file.c_str() ); ts.printf( cvtest::TS::LOG, "chessboard is detected incorrectly in %s\n", img_file.c_str() );
ts.set_failed_test_info( cvtest::TS::FAIL_INVALID_OUTPUT ); ts.set_failed_test_info( cvtest::TS::FAIL_INVALID_OUTPUT );
return; return;
} }
if( result )
{
#ifndef WRITE_POINTS #ifndef WRITE_POINTS
double err = calcError(v, expected); double err = calcError(v, expected);
#if 0 #if 0
@ -277,7 +283,6 @@ void CV_ChessboardDetectorTest::run_batch( const string& filename )
cornerSubPix( gray, v, Size(5, 5), Size(-1,-1), TermCriteria(TermCriteria::EPS|TermCriteria::MAX_ITER, 30, 0.1)); cornerSubPix( gray, v, Size(5, 5), Size(-1,-1), TermCriteria(TermCriteria::EPS|TermCriteria::MAX_ITER, 30, 0.1));
//find4QuadCornerSubpix(gray, v, Size(5, 5)); //find4QuadCornerSubpix(gray, v, Size(5, 5));
show_points( gray, expected, v, pattern_size, result ); show_points( gray, expected, v, pattern_size, result );
#ifndef WRITE_POINTS #ifndef WRITE_POINTS
// printf("called find4QuadCornerSubpix\n"); // printf("called find4QuadCornerSubpix\n");
err = calcError(v, expected); err = calcError(v, expected);
@ -293,10 +298,15 @@ void CV_ChessboardDetectorTest::run_batch( const string& filename )
#endif #endif
ts.printf(cvtest::TS::LOG, "Error on %s is %f\n", img_file.c_str(), err); ts.printf(cvtest::TS::LOG, "Error on %s is %f\n", img_file.c_str(), err);
max_precise_error = MAX( max_precise_error, err ); max_precise_error = MAX( max_precise_error, err );
#else #endif
}
#ifdef WRITE_POINTS
Mat mat_v(pattern_size, CV_32FC2, (void*)&v[0]); Mat mat_v(pattern_size, CV_32FC2, (void*)&v[0]);
CvMat cvmat_v = mat_v; FileStorage fs(filename, FileStorage::WRITE);
cvSave( filename.c_str(), &cvmat_v ); fs << "isFound" << result;
fs << "corners" << mat_v;
fs.release();
#endif #endif
progress = update_progress( progress, idx, max_idx, 0 ); progress = update_progress( progress, idx, max_idx, 0 );
} }