Modified the test of findChessboardCorners to check examples when there are no chessboards
This commit is contained in:
parent
f014fb0a0e
commit
7eab7c197d
@ -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 );
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user