@ -1685,12 +1685,14 @@ TEST(Imgproc_ColorBayer, accuracy) { CV_ColorBayerTest test; test.safe_run(); }
TEST ( Imgproc_ColorBayer , regression )
{
cvtest : : TS & ts = * cvtest : : TS : : ptr ( ) ;
cvtest : : TS * ts = cvtest : : TS : : ptr ( ) ;
Mat given = imread ( string ( ts . get_data_path ( ) ) + " /cvtcolor/bayer_input.png " , CV_LOAD_IMAGE_GRAYSCALE ) ;
Mat gold = imread ( string ( ts . get_data_path ( ) ) + " /cvtcolor/bayer_gold.png " , CV_LOAD_IMAGE_UNCHANGED ) ;
Mat given = imread ( string ( ts - > get_data_path ( ) ) + " /cvtcolor/bayer_input.png " , CV_LOAD_IMAGE_GRAYSCALE ) ;
Mat gold = imread ( string ( ts - > get_data_path ( ) ) + " /cvtcolor/bayer_gold.png " , CV_LOAD_IMAGE_UNCHANGED ) ;
Mat result ;
CV_Assert ( given . data ! = NULL & & gold . data ! = NULL ) ;
cvtColor ( given , result , CV_BayerBG2GRAY ) ;
EXPECT_EQ ( gold . type ( ) , result . type ( ) ) ;
@ -1705,10 +1707,10 @@ TEST(Imgproc_ColorBayer, regression)
TEST ( Imgproc_ColorBayerVNG , regression )
{
cvtest : : TS & ts = * cvtest : : TS : : ptr ( ) ;
cvtest : : TS * ts = cvtest : : TS : : ptr ( ) ;
Mat given = imread ( string ( ts . get_data_path ( ) ) + " /cvtcolor/bayer_input.png " , CV_LOAD_IMAGE_GRAYSCALE ) ;
string goldfname = string ( ts . get_data_path ( ) ) + " /cvtcolor/bayerVNG_gold.png " ;
Mat given = imread ( string ( ts - > get_data_path ( ) ) + " /cvtcolor/bayer_input.png " , CV_LOAD_IMAGE_GRAYSCALE ) ;
string goldfname = string ( ts - > get_data_path ( ) ) + " /cvtcolor/bayerVNG_gold.png " ;
Mat gold = imread ( goldfname , CV_LOAD_IMAGE_UNCHANGED ) ;
Mat result ;
@ -1731,91 +1733,94 @@ TEST(Imgproc_ColorBayerVNG, regression)
}
}
// creating Bayer pattern
template < typename T , int depth >
static void calculateBayerPattern ( const Mat & src , Mat & bayer , const char * pattern )
{
Size ssize = src . size ( ) ;
const int scn = 1 ;
bayer . create ( ssize , CV_MAKETYPE ( depth , scn ) ) ;
if ( ! strcmp ( pattern , " bg " ) )
{
for ( int y = 0 ; y < ssize . height ; + + y )
for ( int x = 0 ; x < ssize . width ; + + x )
{
if ( ( x + y ) % 2 )
bayer . at < T > ( y , x ) = static_cast < T > ( src . at < Vec3b > ( y , x ) [ 1 ] ) ;
else if ( x % 2 )
bayer . at < T > ( y , x ) = static_cast < T > ( src . at < Vec3b > ( y , x ) [ 0 ] ) ;
else
bayer . at < T > ( y , x ) = static_cast < T > ( src . at < Vec3b > ( y , x ) [ 2 ] ) ;
}
}
else if ( ! strcmp ( pattern , " gb " ) )
{
for ( int y = 0 ; y < ssize . height ; + + y )
for ( int x = 0 ; x < ssize . width ; + + x )
{
if ( ( x + y ) % 2 = = 0 )
bayer . at < T > ( y , x ) = static_cast < T > ( src . at < Vec3b > ( y , x ) [ 1 ] ) ;
else if ( x % 2 = = 0 )
bayer . at < T > ( y , x ) = static_cast < T > ( src . at < Vec3b > ( y , x ) [ 0 ] ) ;
else
bayer . at < T > ( y , x ) = static_cast < T > ( src . at < Vec3b > ( y , x ) [ 2 ] ) ;
}
}
else if ( ! strcmp ( pattern , " rg " ) )
{
for ( int y = 0 ; y < ssize . height ; + + y )
for ( int x = 0 ; x < ssize . width ; + + x )
{
if ( ( x + y ) % 2 )
bayer . at < T > ( y , x ) = static_cast < T > ( src . at < Vec3b > ( y , x ) [ 1 ] ) ;
else if ( x % 2 = = 0 )
bayer . at < T > ( y , x ) = static_cast < T > ( src . at < Vec3b > ( y , x ) [ 0 ] ) ;
else
bayer . at < T > ( y , x ) = static_cast < T > ( src . at < Vec3b > ( y , x ) [ 2 ] ) ;
}
}
else
{
for ( int y = 0 ; y < ssize . height ; + + y )
for ( int x = 0 ; x < ssize . width ; + + x )
{
if ( ( x + y ) % 2 = = 0 )
bayer . at < T > ( y , x ) = static_cast < T > ( src . at < Vec3b > ( y , x ) [ 1 ] ) ;
else if ( x % 2 )
bayer . at < T > ( y , x ) = static_cast < T > ( src . at < Vec3b > ( y , x ) [ 0 ] ) ;
else
bayer . at < T > ( y , x ) = static_cast < T > ( src . at < Vec3b > ( y , x ) [ 2 ] ) ;
}
}
}
TEST ( Imgproc_ColorBayerVNG_Strict , regression )
{
cvtest : : TS & ts = * cvtest : : TS : : ptr ( ) ;
cvtest : : TS * ts = cvtest : : TS : : ptr ( ) ;
const char pattern [ ] [ 3 ] = { " bg " , " gb " , " rg " , " gr " } ;
const std : : string image_name = " lena.png " ;
const std : : string parent_path = string ( ts . get_data_path ( ) ) + " /cvtcolor_strict/ " ;
const std : : string parent_path = string ( ts - > get_data_path ( ) ) + " /cvtcolor_strict/ " ;
Mat src , dst , bayer , reference ;
std : : string full_path = parent_path + image_name ;
src = imread ( full_path , CV_LOAD_IMAGE_UNCHANGED ) ;
Size ssize = src . size ( ) ;
if ( src . data = = NULL )
{
ts . set_failed_test_info ( cvtest : : TS : : FAIL_MISSING_TEST_DATA ) ;
ts . printf ( cvtest : : TS : : SUMMARY , " No input image \n " ) ;
ts . set_gtest_status ( ) ;
ts - > set_failed_test_info ( cvtest : : TS : : FAIL_MISSING_TEST_DATA ) ;
ts - > printf ( cvtest : : TS : : SUMMARY , " No input image \n " ) ;
ts - > set_gtest_status ( ) ;
return ;
}
int type = - 1 ;
for ( int i = 0 ; i < 4 ; + + i )
{
// creating Bayer pattern
bayer . create ( ssize , CV_MAKETYPE ( src . depth ( ) , 1 ) ) ;
if ( ! strcmp ( pattern [ i ] , " bg " ) )
{
for ( int y = 0 ; y < ssize . height ; + + y )
for ( int x = 0 ; x < ssize . width ; + + x )
{
if ( ( x + y ) % 2 )
bayer . at < uchar > ( y , x ) = src . at < Vec3b > ( y , x ) [ 1 ] ;
else if ( x % 2 )
bayer . at < uchar > ( y , x ) = src . at < Vec3b > ( y , x ) [ 0 ] ;
else
bayer . at < uchar > ( y , x ) = src . at < Vec3b > ( y , x ) [ 2 ] ;
}
type = CV_BayerBG2BGR_VNG ;
}
else if ( ! strcmp ( pattern [ i ] , " gb " ) )
{
for ( int y = 0 ; y < ssize . height ; + + y )
for ( int x = 0 ; x < ssize . width ; + + x )
{
if ( ( x + y ) % 2 = = 0 )
bayer . at < uchar > ( y , x ) = src . at < Vec3b > ( y , x ) [ 1 ] ;
else if ( x % 2 = = 0 )
bayer . at < uchar > ( y , x ) = src . at < Vec3b > ( y , x ) [ 0 ] ;
else
bayer . at < uchar > ( y , x ) = src . at < Vec3b > ( y , x ) [ 2 ] ;
}
type = CV_BayerGB2BGR_VNG ;
}
else if ( ! strcmp ( pattern [ i ] , " rg " ) )
{
for ( int y = 0 ; y < ssize . height ; + + y )
for ( int x = 0 ; x < ssize . width ; + + x )
{
if ( ( x + y ) % 2 )
bayer . at < uchar > ( y , x ) = src . at < Vec3b > ( y , x ) [ 1 ] ;
else if ( x % 2 = = 0 )
bayer . at < uchar > ( y , x ) = src . at < Vec3b > ( y , x ) [ 0 ] ;
else
bayer . at < uchar > ( y , x ) = src . at < Vec3b > ( y , x ) [ 2 ] ;
}
type = CV_BayerRG2BGR_VNG ;
}
else
{
for ( int y = 0 ; y < ssize . height ; + + y )
for ( int x = 0 ; x < ssize . width ; + + x )
{
if ( ( x + y ) % 2 = = 0 )
bayer . at < uchar > ( y , x ) = src . at < Vec3b > ( y , x ) [ 1 ] ;
else if ( x % 2 )
bayer . at < uchar > ( y , x ) = src . at < Vec3b > ( y , x ) [ 0 ] ;
else
bayer . at < uchar > ( y , x ) = src . at < Vec3b > ( y , x ) [ 2 ] ;
}
type = CV_BayerGR2BGR_VNG ;
}
calculateBayerPattern < uchar , CV_8U > ( src , bayer , pattern [ i ] ) ;
CV_Assert ( ! bayer . empty ( ) & & bayer . type ( ) = = CV_8UC1 ) ;
// calculating a dst image
cvtColor ( bayer , dst , type ) ;
cvtColor ( bayer , dst , CV_BayerBG2BGR_VNG + i ) ;
// reading a reference image
full_path = parent_path + pattern [ i ] + image_name ;
@ -1829,16 +1834,17 @@ TEST(Imgproc_ColorBayerVNG_Strict, regression)
if ( reference . depth ( ) ! = dst . depth ( ) | | reference . channels ( ) ! = dst . channels ( ) | |
reference . size ( ) ! = dst . size ( ) )
{
ts . set_failed_test_info ( cvtest : : TS : : FAIL_MISMATCH ) ;
ts . printf ( cvtest : : TS : : SUMMARY , " \n Reference channels: %d \n "
std : : cout < < reference ( Rect ( 0 , 0 , 5 , 5 ) ) < < std : : endl < < std : : endl < < std : : endl ;
ts - > set_failed_test_info ( cvtest : : TS : : FAIL_MISMATCH ) ;
ts - > printf ( cvtest : : TS : : SUMMARY , " \n Reference channels: %d \n "
" Actual channels: %d \n " , reference . channels ( ) , dst . channels ( ) ) ;
ts . printf ( cvtest : : TS : : SUMMARY , " \n Reference depth: %d \n "
ts - > printf ( cvtest : : TS : : SUMMARY , " \n Reference depth: %d \n "
" Actual depth: %d \n " , reference . depth ( ) , dst . depth ( ) ) ;
ts . printf ( cvtest : : TS : : SUMMARY , " \n Reference rows: %d \n "
ts - > printf ( cvtest : : TS : : SUMMARY , " \n Reference rows: %d \n "
" Actual rows: %d \n " , reference . rows , dst . rows ) ;
ts . printf ( cvtest : : TS : : SUMMARY , " \n Reference cols: %d \n "
ts - > printf ( cvtest : : TS : : SUMMARY , " \n Reference cols: %d \n "
" Actual cols: %d \n " , reference . cols , dst . cols ) ;
ts . set_gtest_status ( ) ;
ts - > set_gtest_status ( ) ;
return ;
}
@ -1849,16 +1855,15 @@ TEST(Imgproc_ColorBayerVNG_Strict, regression)
int nonZero = countNonZero ( diff . reshape ( 1 ) > 1 ) ;
if ( nonZero ! = 0 )
{
ts . set_failed_test_info ( cvtest : : TS : : FAIL_BAD_ACCURACY ) ;
ts . printf ( cvtest : : TS : : SUMMARY , " \n Count non zero in absdiff: %d \n " , nonZero ) ;
ts . set_gtest_status ( ) ;
ts - > set_failed_test_info ( cvtest : : TS : : FAIL_BAD_ACCURACY ) ;
ts - > printf ( cvtest : : TS : : SUMMARY , " \n Count non zero in absdiff: %d \n " , nonZero ) ;
ts - > set_gtest_status ( ) ;
return ;
}
}
}
void GetTestMatrix ( Mat & src )
static void getTestMatrix ( Mat & src )
{
Size ssize ( 1000 , 1000 ) ;
src . create ( ssize , CV_32FC3 ) ;
@ -1883,7 +1888,7 @@ void GetTestMatrix(Mat& src)
}
}
void validate_r esult( const Mat & reference , const Mat & actual , const Mat & src = Mat ( ) , int mode = - 1 )
static void validateR esult( const Mat & reference , const Mat & actual , const Mat & src = Mat ( ) , int mode = - 1 )
{
cvtest : : TS * ts = cvtest : : TS : : ptr ( ) ;
Size ssize = reference . size ( ) ;
@ -1924,8 +1929,7 @@ void validate_result(const Mat& reference, const Mat& actual, const Mat& src = M
TEST ( Imgproc_ColorLab_Full , accuracy )
{
Mat src ;
GetTestMatrix ( src ) ;
Mat reference ( src . size ( ) , CV_32FC3 ) ;
getTestMatrix ( src ) ;
Size ssize = src . size ( ) ;
CV_Assert ( ssize . width = = ssize . height ) ;
@ -1942,12 +1946,245 @@ TEST(Imgproc_ColorLab_Full, accuracy)
cv : : Mat recons ;
cv : : cvtColor ( lab , recons , inverse_code ) ;
validate_result ( src , recons , src , forward_code ) ;
validateResult ( src , recons , src , forward_code ) ;
}
static void test_Bayer2RGB_EdgeAware_8u ( const Mat & src , Mat & dst , int code )
{
if ( dst . empty ( ) )
dst . create ( src . size ( ) , CV_MAKETYPE ( src . depth ( ) , 3 ) ) ;
Size size = src . size ( ) ;
size . width - = 1 ;
size . height - = 1 ;
// src *= 255.0f;
// recons *= 255.0f;
int dcn = dst . channels ( ) ;
CV_Assert ( dcn = = 3 ) ;
int step = src . step ;
const uchar * S = src . ptr < uchar > ( 1 ) + 1 ;
uchar * D = dst . ptr < uchar > ( 1 ) + dcn ;
int start_with_green = code = = CV_BayerGB2BGR_EA | | code = = CV_BayerGR2BGR_EA ? 1 : 0 ;
int blue = code = = CV_BayerGB2BGR_EA | | code = = CV_BayerBG2BGR_EA ? 1 : 0 ;
for ( int y = 1 ; y < size . height ; + + y )
{
S = src . ptr < uchar > ( y ) + 1 ;
D = dst . ptr < uchar > ( y ) + dcn ;
if ( start_with_green )
{
for ( int x = 1 ; x < size . width ; x + = 2 , S + = 2 , D + = 2 * dcn )
{
// red
D [ 0 ] = ( S [ - 1 ] + S [ 1 ] ) / 2 ;
D [ 1 ] = S [ 0 ] ;
D [ 2 ] = ( S [ - step ] + S [ step ] ) / 2 ;
if ( ! blue )
std : : swap ( D [ 0 ] , D [ 2 ] ) ;
}
S = src . ptr < uchar > ( y ) + 2 ;
D = dst . ptr < uchar > ( y ) + 2 * dcn ;
for ( int x = 2 ; x < size . width ; x + = 2 , S + = 2 , D + = 2 * dcn )
{
// red
D [ 0 ] = S [ 0 ] ;
D [ 1 ] = ( std : : abs ( S [ - 1 ] - S [ 1 ] ) > std : : abs ( S [ step ] - S [ - step ] ) ? ( S [ step ] + S [ - step ] + 1 ) : ( S [ - 1 ] + S [ 1 ] + 1 ) ) / 2 ;
D [ 2 ] = ( ( S [ - step - 1 ] + S [ - step + 1 ] + S [ step - 1 ] + S [ step + 1 ] + 2 ) / 4 ) ;
if ( ! blue )
std : : swap ( D [ 0 ] , D [ 2 ] ) ;
}
}
else
{
for ( int x = 1 ; x < size . width ; x + = 2 , S + = 2 , D + = 2 * dcn )
{
D [ 0 ] = S [ 0 ] ;
D [ 1 ] = ( std : : abs ( S [ - 1 ] - S [ 1 ] ) > std : : abs ( S [ step ] - S [ - step ] ) ? ( S [ step ] + S [ - step ] + 1 ) : ( S [ - 1 ] + S [ 1 ] + 1 ) ) / 2 ;
D [ 2 ] = ( ( S [ - step - 1 ] + S [ - step + 1 ] + S [ step - 1 ] + S [ step + 1 ] + 2 ) / 4 ) ;
if ( ! blue )
std : : swap ( D [ 0 ] , D [ 2 ] ) ;
}
// imshow("Test", src);
// imshow("OpenCV", recons);
// waitKey();
S = src . ptr < uchar > ( y ) + 2 ;
D = dst . ptr < uchar > ( y ) + 2 * dcn ;
for ( int x = 2 ; x < size . width ; x + = 2 , S + = 2 , D + = 2 * dcn )
{
D [ 0 ] = ( S [ - 1 ] + S [ 1 ] + 1 ) / 2 ;
D [ 1 ] = S [ 0 ] ;
D [ 2 ] = ( S [ - step ] + S [ step ] + 1 ) / 2 ;
if ( ! blue )
std : : swap ( D [ 0 ] , D [ 2 ] ) ;
}
}
D = dst . ptr < uchar > ( y + 1 ) - dcn ;
for ( int i = 0 ; i < dcn ; + + i )
{
D [ i ] = D [ - dcn + i ] ;
D [ - static_cast < int > ( dst . step ) + dcn + i ] = D [ - static_cast < int > ( dst . step ) + ( dcn < < 1 ) + i ] ;
}
start_with_green ^ = 1 ;
blue ^ = 1 ;
}
+ + size . width ;
uchar * firstRow = dst . data , * lastRow = dst . data + size . height * dst . step ;
size . width * = dcn ;
for ( int x = 0 ; x < size . width ; + + x )
{
firstRow [ x ] = firstRow [ dst . step + x ] ;
lastRow [ x ] = lastRow [ - static_cast < int > ( dst . step ) + x ] ;
}
}
template < typename T >
static void checkData ( const Mat & actual , const Mat & reference , cvtest : : TS * ts , const char * type ,
bool & next , const char * bayer_type )
{
EXPECT_EQ ( actual . size ( ) , reference . size ( ) ) ;
EXPECT_EQ ( actual . channels ( ) , reference . channels ( ) ) ;
EXPECT_EQ ( actual . depth ( ) , reference . depth ( ) ) ;
Size size = reference . size ( ) ;
int dcn = reference . channels ( ) ;
size . width * = dcn ;
for ( int y = 0 ; y < size . height & & next ; + + y )
{
const T * A = reinterpret_cast < const T * > ( actual . data + actual . step * y ) ;
const T * R = reinterpret_cast < const T * > ( reference . data + reference . step * y ) ;
for ( int x = 0 ; x < size . width & & next ; + + x )
if ( std : : abs ( A [ x ] - R [ x ] ) > 1 )
{
# define SUM cvtest::TS::SUMMARY
ts - > printf ( SUM , " \n Reference value: %d \n " , static_cast < int > ( R [ x ] ) ) ;
ts - > printf ( SUM , " Actual value: %d \n " , static_cast < int > ( A [ x ] ) ) ;
ts - > printf ( SUM , " (y, x): (%d, %d) \n " , y , x / reference . channels ( ) ) ;
ts - > printf ( SUM , " Channel pos: %d \n " , x % reference . channels ( ) ) ;
ts - > printf ( SUM , " Pattern: %s \n " , type ) ;
ts - > printf ( SUM , " Bayer image type: %s " , bayer_type ) ;
# undef SUM
Mat diff ;
absdiff ( actual , reference , diff ) ;
EXPECT_EQ ( countNonZero ( diff . reshape ( 1 ) > 1 ) , 0 ) ;
ts - > set_failed_test_info ( cvtest : : TS : : FAIL_BAD_ACCURACY ) ;
ts - > set_gtest_status ( ) ;
next = false ;
}
}
}
TEST ( ImgProc_BayerEdgeAwareDemosaicing , accuracy )
{
cvtest : : TS * ts = cvtest : : TS : : ptr ( ) ;
const std : : string image_name = " lena.png " ;
const std : : string parent_path = string ( ts - > get_data_path ( ) ) + " /cvtcolor_strict/ " ;
Mat src , bayer ;
std : : string full_path = parent_path + image_name ;
src = imread ( full_path , CV_LOAD_IMAGE_UNCHANGED ) ;
if ( src . data = = NULL )
{
ts - > set_failed_test_info ( cvtest : : TS : : FAIL_MISSING_TEST_DATA ) ;
ts - > printf ( cvtest : : TS : : SUMMARY , " No input image \n " ) ;
ts - > set_gtest_status ( ) ;
return ;
}
/*
COLOR_BayerBG2BGR_EA = 127 ,
COLOR_BayerGB2BGR_EA = 128 ,
COLOR_BayerRG2BGR_EA = 129 ,
COLOR_BayerGR2BGR_EA = 130 ,
*/
bool next = true ;
const char * types [ ] = { " bg " , " gb " , " rg " , " gr " } ;
for ( int i = 0 ; i < 4 & & next ; + + i )
{
calculateBayerPattern < uchar , CV_8U > ( src , bayer , types [ i ] ) ;
Mat reference ;
test_Bayer2RGB_EdgeAware_8u ( bayer , reference , CV_BayerBG2BGR_EA + i ) ;
for ( int t = 0 ; t < = 1 ; + + t )
{
if ( t = = 1 )
calculateBayerPattern < unsigned short int , CV_16U > ( src , bayer , types [ i ] ) ;
CV_Assert ( ! bayer . empty ( ) & & ( bayer . type ( ) = = CV_8UC1 | | bayer . type ( ) = = CV_16UC1 ) ) ;
Mat actual ;
cv : : demosaicing ( bayer , actual , CV_BayerBG2BGR_EA + i ) ;
if ( t = = 0 )
checkData < unsigned char > ( actual , reference , ts , types [ i ] , next , " CV_8U " ) ;
else
{
Mat tmp ;
reference . convertTo ( tmp , CV_16U ) ;
checkData < unsigned short int > ( actual , tmp , ts , types [ i ] , next , " CV_16U " ) ;
}
}
}
}
TEST ( ImgProc_Bayer2RGBA , accuracy )
{
cvtest : : TS * ts = cvtest : : TS : : ptr ( ) ;
Mat raw = imread ( string ( ts - > get_data_path ( ) ) + " /cvtcolor/bayer_input.png " , CV_LOAD_IMAGE_GRAYSCALE ) ;
Mat rgb , reference ;
CV_Assert ( raw . channels ( ) = = 1 ) ;
CV_Assert ( raw . depth ( ) = = CV_8U ) ;
CV_Assert ( ! raw . empty ( ) ) ;
for ( int code = CV_BayerBG2BGR ; code < = CV_BayerGR2BGR ; + + code )
{
cvtColor ( raw , rgb , code ) ;
cvtColor ( rgb , reference , CV_BGR2BGRA ) ;
Mat actual ;
cvtColor ( raw , actual , code , 4 ) ;
EXPECT_EQ ( reference . size ( ) , actual . size ( ) ) ;
EXPECT_EQ ( reference . depth ( ) , actual . depth ( ) ) ;
EXPECT_EQ ( reference . channels ( ) , actual . channels ( ) ) ;
Size ssize = raw . size ( ) ;
int cn = reference . channels ( ) ;
ssize . width * = cn ;
bool next = true ;
for ( int y = 0 ; y < ssize . height & & next ; + + y )
{
const uchar * rD = reference . ptr < uchar > ( y ) ;
const uchar * D = actual . ptr < uchar > ( y ) ;
for ( int x = 0 ; x < ssize . width & & next ; + + x )
if ( abs ( rD [ x ] - D [ x ] ) > = 1 )
{
next = false ;
ts - > printf ( cvtest : : TS : : SUMMARY , " Error in: (%d, %d) \n " , x / cn , y ) ;
ts - > printf ( cvtest : : TS : : SUMMARY , " Reference value: %d \n " , rD [ x ] ) ;
ts - > printf ( cvtest : : TS : : SUMMARY , " Actual value: %d \n " , D [ x ] ) ;
ts - > printf ( cvtest : : TS : : SUMMARY , " Src value: %d \n " , raw . ptr < uchar > ( y ) [ x ] ) ;
ts - > printf ( cvtest : : TS : : SUMMARY , " Size: (%d, %d) \n " , reference . rows , reference . cols ) ;
Mat diff ;
absdiff ( actual , reference , diff ) ;
EXPECT_EQ ( countNonZero ( diff . reshape ( 1 ) > 1 ) , 0 ) ;
ts - > set_failed_test_info ( cvtest : : TS : : FAIL_BAD_ACCURACY ) ;
ts - > set_gtest_status ( ) ;
}
}
}
}