mirror of
https://github.com/opencv/opencv.git
synced 2026-07-29 15:23:05 +04:00
Merge branch '2.4'
This commit is contained in:
@@ -547,6 +547,15 @@ struct CV_EXPORTS DefaultRngAuto
|
||||
|
||||
}
|
||||
|
||||
namespace cvtest
|
||||
{
|
||||
|
||||
// test images generation functions
|
||||
CV_EXPORTS void fillGradient(Mat& img, int delta = 5);
|
||||
CV_EXPORTS void smoothBorder(Mat& img, const Scalar& color, int delta = 3);
|
||||
|
||||
} //namespace cvtest
|
||||
|
||||
// fills c with zeros
|
||||
CV_EXPORTS void cvTsZero( CvMat* c, const CvMat* mask=0 );
|
||||
|
||||
|
||||
@@ -56,33 +56,39 @@ if __name__ == "__main__":
|
||||
test_cases[name] = [None] * setsCount
|
||||
test_cases[name][i] = case
|
||||
|
||||
testsuits = [] # testsuit name, time, flag for failed tests
|
||||
testsuits = [] # testsuit name, time, num, flag for failed tests
|
||||
|
||||
overall_time = 0
|
||||
prevGroupName = None
|
||||
suit_time = 0
|
||||
has_failed = False
|
||||
suit_num = 0
|
||||
fails_num = 0
|
||||
for name in sorted(test_cases.iterkeys(), key=alphanum_keyselector):
|
||||
cases = test_cases[name]
|
||||
|
||||
groupName = next(c for c in cases if c).shortName()
|
||||
if groupName != prevGroupName:
|
||||
if prevGroupName != None:
|
||||
suit_time = suit_time/60 #from seconds to minutes
|
||||
testsuits.append({'name': prevGroupName, 'time': suit_time, \
|
||||
'failed': has_failed})
|
||||
has_failed = False
|
||||
'num': suit_num, 'failed': fails_num})
|
||||
overall_time += suit_time
|
||||
suit_time = 0
|
||||
suit_num = 0
|
||||
fails_num = 0
|
||||
prevGroupName = groupName
|
||||
|
||||
for i in range(setsCount):
|
||||
case = cases[i]
|
||||
if not case is None:
|
||||
suit_num += 1
|
||||
if case.get('status') == 'run':
|
||||
suit_time += case.get('time')
|
||||
if case.get('status') == 'failed':
|
||||
has_failed = True
|
||||
fails_num += 1
|
||||
|
||||
testsuits.append({'name': prevGroupName, 'time': suit_time, \
|
||||
'failed': has_failed})
|
||||
'num': suit_num, 'failed': fails_num})
|
||||
|
||||
if len(testsuits)==0:
|
||||
print 'No testsuits found'
|
||||
@@ -91,17 +97,19 @@ if __name__ == "__main__":
|
||||
tbl = table()
|
||||
|
||||
# header
|
||||
tbl.newColumn('name', 'Name of testsuit', align = 'left', cssclass = 'col_name')
|
||||
tbl.newColumn('time', 'Time (ms)', align = 'left', cssclass = 'col_name')
|
||||
tbl.newColumn('failed', 'Failed tests', align = 'center', cssclass = 'col_name')
|
||||
tbl.newColumn('name', 'Testsuit', align = 'left', cssclass = 'col_name')
|
||||
tbl.newColumn('time', 'Time (min)', align = 'center', cssclass = 'col_name')
|
||||
tbl.newColumn('num', 'Num of tests', align = 'center', cssclass = 'col_name')
|
||||
tbl.newColumn('failed', 'Failed', align = 'center', cssclass = 'col_name')
|
||||
|
||||
# rows
|
||||
for suit in sorted(testsuits, key = lambda suit: suit['time'], reverse = True):
|
||||
tbl.newRow()
|
||||
tbl.newCell('name', suit['name'])
|
||||
tbl.newCell('time', formatValue(suit['time'], '', ''), suit['time'])
|
||||
if (suit['failed']):
|
||||
tbl.newCell('failed', 'Yes')
|
||||
tbl.newCell('num', suit['num'])
|
||||
if (suit['failed'] != 0):
|
||||
tbl.newCell('failed', suit['failed'])
|
||||
else:
|
||||
tbl.newCell('failed', ' ')
|
||||
|
||||
@@ -116,5 +124,6 @@ if __name__ == "__main__":
|
||||
|
||||
splitter = 15 * '*'
|
||||
print '\n%s\n %s\n%s\n' % (splitter, module_name, splitter)
|
||||
print 'Overall time: %.2f min\n' % overall_time
|
||||
tbl.consolePrintTable(sys.stdout)
|
||||
print 4 * '\n'
|
||||
@@ -69,6 +69,8 @@ parse_patterns = (
|
||||
{'name': "ndk_path", 'default': None, 'pattern': re.compile("^(?:ANDROID_NDK|ANDROID_STANDALONE_TOOLCHAIN)?:PATH=(.*)$")},
|
||||
{'name': "android_abi", 'default': None, 'pattern': re.compile("^ANDROID_ABI:STRING=(.*)$")},
|
||||
{'name': "android_executable", 'default': None, 'pattern': re.compile("^ANDROID_EXECUTABLE:FILEPATH=(.*android.*)$")},
|
||||
{'name': "ant_executable", 'default': None, 'pattern': re.compile("^ANT_EXECUTABLE:FILEPATH=(.*ant.*)$")},
|
||||
{'name': "java_test_binary_dir", 'default': None, 'pattern': re.compile("^opencv_test_java_BINARY_DIR:STATIC=(.*)$")},
|
||||
{'name': "is_x64", 'default': "OFF", 'pattern': re.compile("^CUDA_64_BIT_DEVICE_CODE:BOOL=(ON)$")},#ugly(
|
||||
{'name': "cmake_generator", 'default': None, 'pattern': re.compile("^CMAKE_GENERATOR:INTERNAL=(.+)$")},
|
||||
{'name': "cxx_compiler", 'default': None, 'pattern': re.compile("^CMAKE_CXX_COMPILER:FILEPATH=(.+)$")},
|
||||
@@ -431,6 +433,8 @@ class TestSuite(object):
|
||||
if self.tests_dir and os.path.isdir(self.tests_dir):
|
||||
files = glob.glob(os.path.join(self.tests_dir, self.nameprefix + "*"))
|
||||
files = [f for f in files if self.isTest(f)]
|
||||
if self.ant_executable and self.java_test_binary_dir:
|
||||
files.append("java")
|
||||
return files
|
||||
return []
|
||||
|
||||
@@ -740,6 +744,16 @@ class TestSuite(object):
|
||||
if os.path.isfile(hostlogpath):
|
||||
return hostlogpath
|
||||
return None
|
||||
elif path == "java":
|
||||
cmd = [self.ant_executable, "-DjavaLibraryPath=" + self.tests_dir, "buildAndTest"]
|
||||
|
||||
print >> _stderr, "Run command:", " ".join(cmd)
|
||||
try:
|
||||
Popen(cmd, stdout=_stdout, stderr=_stderr, cwd = self.java_test_binary_dir + "/.build").wait()
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
return None
|
||||
else:
|
||||
cmd = [exe]
|
||||
if self.options.help:
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
#include <time.h>
|
||||
#if defined WIN32 || defined _WIN32 || defined WIN64 || defined _WIN64
|
||||
#include <io.h>
|
||||
#define NOMINMAX
|
||||
#include <windows.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
@@ -582,6 +583,79 @@ void TS::printf( int streams, const char* fmt, ... )
|
||||
TS ts;
|
||||
TS* TS::ptr() { return &ts; }
|
||||
|
||||
void fillGradient(Mat& img, int delta)
|
||||
{
|
||||
const int ch = img.channels();
|
||||
CV_Assert(!img.empty() && img.depth() == CV_8U && ch <= 4);
|
||||
|
||||
int n = 255 / delta;
|
||||
int r, c, i;
|
||||
for(r=0; r<img.rows; r++)
|
||||
{
|
||||
int kR = r % (2*n);
|
||||
int valR = (kR<=n) ? delta*kR : delta*(2*n-kR);
|
||||
for(c=0; c<img.cols; c++)
|
||||
{
|
||||
int kC = c % (2*n);
|
||||
int valC = (kC<=n) ? delta*kC : delta*(2*n-kC);
|
||||
uchar vals[] = {uchar(valR), uchar(valC), uchar(200*r/img.rows), uchar(255)};
|
||||
uchar *p = img.ptr(r, c);
|
||||
for(i=0; i<ch; i++) p[i] = vals[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void smoothBorder(Mat& img, const Scalar& color, int delta)
|
||||
{
|
||||
const int ch = img.channels();
|
||||
CV_Assert(!img.empty() && img.depth() == CV_8U && ch <= 4);
|
||||
|
||||
Scalar s;
|
||||
uchar *p = NULL;
|
||||
int n = 100/delta;
|
||||
int nR = std::min(n, (img.rows+1)/2), nC = std::min(n, (img.cols+1)/2);
|
||||
|
||||
int r, c, i;
|
||||
for(r=0; r<nR; r++)
|
||||
{
|
||||
double k1 = r*delta/100., k2 = 1-k1;
|
||||
for(c=0; c<img.cols; c++)
|
||||
{
|
||||
p = img.ptr(r, c);
|
||||
for(i=0; i<ch; i++) s[i] = p[i];
|
||||
s = s * k1 + color * k2;
|
||||
for(i=0; i<ch; i++) p[i] = uchar(s[i]);
|
||||
}
|
||||
for(c=0; c<img.cols; c++)
|
||||
{
|
||||
p = img.ptr(img.rows-r-1, c);
|
||||
for(i=0; i<ch; i++) s[i] = p[i];
|
||||
s = s * k1 + color * k2;
|
||||
for(i=0; i<ch; i++) p[i] = uchar(s[i]);
|
||||
}
|
||||
}
|
||||
|
||||
for(r=0; r<img.rows; r++)
|
||||
{
|
||||
for(c=0; c<nC; c++)
|
||||
{
|
||||
double k1 = c*delta/100., k2 = 1-k1;
|
||||
p = img.ptr(r, c);
|
||||
for(i=0; i<ch; i++) s[i] = p[i];
|
||||
s = s * k1 + color * k2;
|
||||
for(i=0; i<ch; i++) p[i] = uchar(s[i]);
|
||||
}
|
||||
for(c=0; c<n; c++)
|
||||
{
|
||||
double k1 = c*delta/100., k2 = 1-k1;
|
||||
p = img.ptr(r, img.cols-c-1);
|
||||
for(i=0; i<ch; i++) s[i] = p[i];
|
||||
s = s * k1 + color * k2;
|
||||
for(i=0; i<ch; i++) p[i] = uchar(s[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} //namespace cvtest
|
||||
|
||||
/* End of file. */
|
||||
|
||||
@@ -339,7 +339,7 @@ static double evalEps(double expected, double actual, double _eps, ERROR_TYPE er
|
||||
if (err == ERROR_ABSOLUTE)
|
||||
return _eps;
|
||||
else if (err == ERROR_RELATIVE)
|
||||
return std::max(std::abs(expected), std::abs(actual)) * err;
|
||||
return std::max(std::abs(expected), std::abs(actual)) * _eps;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user