@ -583,132 +583,133 @@ TEST(Core_InputOutput, filestorage_yml_compatibility)
//EXPECT_ANY_THROW();
}
TEST ( Core_InputOutput , filestorage_yml_base64 )
class CV_Base64IOTest : public cvtest : : BaseTest
{
cv : : Mat _em_out , _em_in ;
cv : : Mat _2d_out , _2d_in ;
cv : : Mat _nd_out , _nd_in ;
{ /* init */
/* normal mat */
_2d_out = cv : : Mat ( 100 , 100 , CV_8UC3 , cvScalar ( 1U , 2U , 127U ) ) ;
for ( int i = 0 ; i < _2d_out . rows ; + + i )
for ( int j = 0 ; j < _2d_out . cols ; + + j )
_2d_out . at < cv : : Vec3b > ( i , j ) [ 1 ] = i % 256 ;
/* 4d mat */
const int Size [ ] = { 4 , 4 , 4 , 4 } ;
cv : : Mat _4d ( 4 , Size , CV_64FC4 , cvScalar ( 0.888 , 0.111 , 0.666 , 0.444 ) ) ;
const cv : : Range ranges [ ] = {
cv : : Range ( 0 , 2 ) ,
cv : : Range ( 0 , 2 ) ,
cv : : Range ( 1 , 2 ) ,
cv : : Range ( 0 , 2 ) } ;
_nd_out = _4d ( ranges ) ;
}
private :
std : : string file_name ;
{ /* write */
cv : : FileStorage fs ( " test.yml " , cv : : FileStorage : : WRITE ) ;
CvMat holder = _2d_out ;
cv : : cvWriteMat_Base64 ( * fs , " normal_2d_mat " , & holder ) ;
CvMatND holder_nd = _nd_out ;
cv : : cvWriteMatND_Base64 ( * fs , " normal_nd_mat " , & holder_nd ) ;
holder = _em_out ;
cv : : cvWriteMat_Base64 ( * fs , " empty_2d_mat " , & holder ) ;
fs . release ( ) ;
}
public :
CV_Base64IOTest ( std : : string const & file_name )
: file_name ( file_name ) { }
~ CV_Base64IOTest ( ) { }
protected :
void run ( int )
{
try
{
struct data_t
{
uchar u1 , u2 ;
int i1 , i2 , i3 ;
double d1 , d2 ;
int i4 ;
} ;
std : : vector < data_t > rawdata ;
cv : : Mat _em_out , _em_in ;
cv : : Mat _2d_out , _2d_in ;
cv : : Mat _nd_out , _nd_in ;
{ /* init */
/* normal mat */
_2d_out = cv : : Mat ( 100 , 100 , CV_8UC3 , cvScalar ( 1U , 2U , 127U ) ) ;
for ( int i = 0 ; i < _2d_out . rows ; + + i )
for ( int j = 0 ; j < _2d_out . cols ; + + j )
_2d_out . at < cv : : Vec3b > ( i , j ) [ 1 ] = i % 256 ;
/* 4d mat */
const int Size [ ] = { 4 , 4 , 4 , 4 } ;
cv : : Mat _4d ( 4 , Size , CV_64FC4 , cvScalar ( 0.888 , 0.111 , 0.666 , 0.444 ) ) ;
const cv : : Range ranges [ ] = {
cv : : Range ( 0 , 2 ) ,
cv : : Range ( 0 , 2 ) ,
cv : : Range ( 1 , 2 ) ,
cv : : Range ( 0 , 2 ) } ;
_nd_out = _4d ( ranges ) ;
/* raw data */
for ( int i = 0 ; i < 1000 ; i + + )
rawdata . push_back ( data_t { 1 , 2 , 1 , 2 , 3 , 0.1 , 0.2 , i } ) ;
}
{ /* read */
cv : : FileStorage fs ( " test.yml " , cv : : FileStorage : : READ ) ;
fs [ " empty_2d_mat " ] > > _em_in ;
fs [ " normal_2d_mat " ] > > _2d_in ;
fs [ " normal_nd_mat " ] > > _nd_in ;
fs . release ( ) ;
}
{ /* write */
cv : : FileStorage fs ( file_name , cv : : FileStorage : : WRITE ) ;
CvMat holder = _2d_out ;
cv : : cvWriteMat_Base64 ( * fs , " normal_2d_mat " , & holder ) ;
CvMatND holder_nd = _nd_out ;
cv : : cvWriteMatND_Base64 ( * fs , " normal_nd_mat " , & holder_nd ) ;
holder = _em_out ;
cv : : cvWriteMat_Base64 ( * fs , " empty_2d_mat " , & holder ) ;
cv : : cvStartWriteRawData_Base64 ( * fs , " rawdata " , rawdata . size ( ) , " 2u3i2di " ) ;
for ( int i = 0 ; i < 10 ; i + + )
cv : : cvWriteRawData_Base64 ( * fs , rawdata . data ( ) + i * 100 , 100 ) ;
cv : : cvEndWriteRawData_Base64 ( * fs ) ;
fs . release ( ) ;
}
EXPECT_EQ ( _em_in . rows , _em_out . rows ) ;
EXPECT_EQ ( _em_in . cols , _em_out . cols ) ;
EXPECT_EQ ( _em_in . dims , _em_out . dims ) ;
EXPECT_EQ ( _em_in . depth ( ) , _em_out . depth ( ) ) ;
EXPECT_TRUE ( _em_in . empty ( ) ) ;
EXPECT_EQ ( _2d_in . rows , _2d_in . rows ) ;
EXPECT_EQ ( _2d_in . cols , _2d_in . cols ) ;
EXPECT_EQ ( _2d_in . dims , _2d_in . dims ) ;
EXPECT_EQ ( _2d_in . depth ( ) , _2d_in . depth ( ) ) ;
for ( int i = 0 ; i < _2d_in . rows ; + + i )
for ( int j = 0 ; j < _2d_in . cols ; + + j )
EXPECT_EQ ( _2d_in . at < cv : : Vec3b > ( i , j ) , _2d_out . at < cv : : Vec3b > ( i , j ) ) ;
EXPECT_EQ ( _nd_in . rows , _nd_in . rows ) ;
EXPECT_EQ ( _nd_in . cols , _nd_in . cols ) ;
EXPECT_EQ ( _nd_in . dims , _nd_in . dims ) ;
EXPECT_EQ ( _nd_in . depth ( ) , _nd_in . depth ( ) ) ;
EXPECT_EQ ( cv : : countNonZero ( cv : : mean ( _nd_in ! = _nd_out ) ) , 0 ) ;
}
{ /* read */
cv : : FileStorage fs ( file_name , cv : : FileStorage : : READ ) ;
TEST ( Core_InputOutput , filestorage_xml_base64 )
{
cv : : Mat _em_out , _em_in ;
cv : : Mat _2d_out , _2d_in ;
cv : : Mat _nd_out , _nd_in ;
{ /* init */
/* normal mat */
_2d_out = cv : : Mat ( 100 , 100 , CV_8UC3 , cvScalar ( 1U , 2U , 127U ) ) ;
for ( int i = 0 ; i < _2d_out . rows ; + + i )
for ( int j = 0 ; j < _2d_out . cols ; + + j )
_2d_out . at < cv : : Vec3b > ( i , j ) [ 1 ] = i % 256 ;
/* 4d mat */
const int Size [ ] = { 4 , 4 , 4 , 4 } ;
cv : : Mat _4d ( 4 , Size , CV_64FC4 , cvScalar ( 0.888 , 0.111 , 0.666 , 0.444 ) ) ;
const cv : : Range ranges [ ] = {
cv : : Range ( 0 , 2 ) ,
cv : : Range ( 0 , 2 ) ,
cv : : Range ( 1 , 2 ) ,
cv : : Range ( 0 , 2 ) } ;
_nd_out = _4d ( ranges ) ;
}
/* mat */
fs [ " empty_2d_mat " ] > > _em_in ;
fs [ " normal_2d_mat " ] > > _2d_in ;
fs [ " normal_nd_mat " ] > > _nd_in ;
{ /* write */
cv : : FileStorage fs ( " test.xml " , cv : : FileStorage : : WRITE ) ;
CvMat holder = _2d_out ;
cv : : cvWriteMat_Base64 ( * fs , " normal_2d_mat " , & holder ) ;
CvMatND holder_nd = _nd_out ;
cv : : cvWriteMatND_Base64 ( * fs , " normal_nd_mat " , & holder_nd ) ;
holder = _em_out ;
cv : : cvWriteMat_Base64 ( * fs , " empty_2d_mat " , & holder ) ;
fs . release ( ) ;
}
/* raw data */
std : : vector < data_t > ( 1000 ) . swap ( rawdata ) ;
cvReadRawData ( * fs , fs [ " rawdata " ] . node , rawdata . data ( ) , " 2u3i2di " ) ;
fs . release ( ) ;
}
for ( int i = 0 ; i < 1000 ; i + + ) {
// TODO: Solve this bug
//EXPECT_EQ(rawdata[i].u1, 1);
//EXPECT_EQ(rawdata[i].u2, 2);
//EXPECT_EQ(rawdata[i].i1, 1);
//EXPECT_EQ(rawdata[i].i2, 2);
//EXPECT_EQ(rawdata[i].i3, 3);
//EXPECT_EQ(rawdata[i].d1, 0.1);
//EXPECT_EQ(rawdata[i].d2, 0.2);
//EXPECT_EQ(rawdata[i].i4, i);
}
{ /* read */
cv : : FileStorage fs ( " test.xml " , cv : : FileStorage : : READ ) ;
fs [ " empty_2d_mat " ] > > _em_in ;
fs [ " normal_2d_mat " ] > > _2d_in ;
fs [ " normal_nd_mat " ] > > _nd_in ;
fs . release ( ) ;
EXPECT_EQ ( _em_in . rows , _em_out . rows ) ;
EXPECT_EQ ( _em_in . cols , _em_out . cols ) ;
EXPECT_EQ ( _em_in . dims , _em_out . dims ) ;
EXPECT_EQ ( _em_in . depth ( ) , _em_out . depth ( ) ) ;
EXPECT_TRUE ( _em_in . empty ( ) ) ;
EXPECT_EQ ( _2d_in . rows , _2d_in . rows ) ;
EXPECT_EQ ( _2d_in . cols , _2d_in . cols ) ;
EXPECT_EQ ( _2d_in . dims , _2d_in . dims ) ;
EXPECT_EQ ( _2d_in . depth ( ) , _2d_in . depth ( ) ) ;
for ( int i = 0 ; i < _2d_in . rows ; + + i )
for ( int j = 0 ; j < _2d_in . cols ; + + j )
EXPECT_EQ ( _2d_in . at < cv : : Vec3b > ( i , j ) , _2d_out . at < cv : : Vec3b > ( i , j ) ) ;
EXPECT_EQ ( _nd_in . rows , _nd_in . rows ) ;
EXPECT_EQ ( _nd_in . cols , _nd_in . cols ) ;
EXPECT_EQ ( _nd_in . dims , _nd_in . dims ) ;
EXPECT_EQ ( _nd_in . depth ( ) , _nd_in . depth ( ) ) ;
EXPECT_EQ ( cv : : countNonZero ( cv : : mean ( _nd_in ! = _nd_out ) ) , 0 ) ;
}
catch ( . . . )
{
ts - > set_failed_test_info ( cvtest : : TS : : FAIL_MISMATCH ) ;
}
}
} ;
TEST ( Core_InputOutput , filestorage_yml_base64 )
{
CV_Base64IOTest test ( " base64_test.yml " ) ; test . safe_run ( ) ;
}
EXPECT_EQ ( _em_in . rows , _em_out . rows ) ;
EXPECT_EQ ( _em_in . cols , _em_out . cols ) ;
EXPECT_EQ ( _em_in . dims , _em_out . dims ) ;
EXPECT_EQ ( _em_in . depth ( ) , _em_out . depth ( ) ) ;
EXPECT_TRUE ( _em_in . empty ( ) ) ;
EXPECT_EQ ( _2d_in . rows , _2d_in . rows ) ;
EXPECT_EQ ( _2d_in . cols , _2d_in . cols ) ;
EXPECT_EQ ( _2d_in . dims , _2d_in . dims ) ;
EXPECT_EQ ( _2d_in . depth ( ) , _2d_in . depth ( ) ) ;
for ( int i = 0 ; i < _2d_in . rows ; + + i )
for ( int j = 0 ; j < _2d_in . cols ; + + j )
EXPECT_EQ ( _2d_in . at < cv : : Vec3b > ( i , j ) , _2d_out . at < cv : : Vec3b > ( i , j ) ) ;
EXPECT_EQ ( _nd_in . rows , _nd_in . rows ) ;
EXPECT_EQ ( _nd_in . cols , _nd_in . cols ) ;
EXPECT_EQ ( _nd_in . dims , _nd_in . dims ) ;
EXPECT_EQ ( _nd_in . depth ( ) , _nd_in . depth ( ) ) ;
EXPECT_EQ ( cv : : countNonZero ( cv : : sum ( _nd_in ! = _nd_out ) ) , 0 ) ;
TEST ( Core_InputOutput , filestorage_xml_base64 )
{
CV_Base64IOTest test ( " base64_test.xml " ) ; test . safe_run ( ) ;
}