From d9c74f63e13b962d3eb6a9db05502277b157f6ad Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Mon, 25 Jun 2012 11:24:06 +0000 Subject: [PATCH] All tests writing temporary files are updated to use cv::tempfile() function --- modules/calib3d/test/test_cornerssubpix.cpp | 74 +++---- modules/core/src/system.cpp | 67 ++++-- modules/core/test/test_arithm.cpp | 208 +++++++++--------- modules/core/test/test_io.cpp | 105 ++++----- .../include/opencv2/features2d/features2d.hpp | 78 +++---- modules/features2d/test/test_fast.cpp | 28 +-- modules/features2d/test/test_mser.cpp | 10 +- .../features2d/test/test_nearestneighbors.cpp | 8 +- modules/gpu/perf/perf_video.cpp | 2 +- modules/gpu/perf_cpu/perf_video.cpp | 2 +- modules/gpu/test/test_video.cpp | 2 +- modules/highgui/test/test_ffmpeg.cpp | 14 +- modules/highgui/test/test_grfmt.cpp | 32 ++- modules/highgui/test/test_video_io.cpp | 12 +- modules/highgui/test/test_video_pos.cpp | 54 +++-- modules/imgproc/test/test_grabcut.cpp | 36 +-- modules/imgproc/test/test_watershed.cpp | 28 +-- modules/legacy/test/test_em.cpp | 6 +- modules/legacy/test/test_stereomatching.cpp | 4 +- modules/ml/test/test_emknearestkmeans.cpp | 2 +- modules/ml/test/test_precomp.hpp | 4 +- modules/ml/test/test_save_load.cpp | 2 +- .../objdetect/test/test_latentsvmdetector.cpp | 8 +- modules/photo/test/test_inpaint.cpp | 35 ++- modules/python/src2/gen.py | 6 +- modules/ts/misc/run.py | 111 ++++++---- 26 files changed, 500 insertions(+), 438 deletions(-) diff --git a/modules/calib3d/test/test_cornerssubpix.cpp b/modules/calib3d/test/test_cornerssubpix.cpp index 6afcfc605..70f0be8fb 100644 --- a/modules/calib3d/test/test_cornerssubpix.cpp +++ b/modules/calib3d/test/test_cornerssubpix.cpp @@ -54,7 +54,7 @@ protected: Mat intrinsic_matrix_; Mat distortion_coeffs_; Size image_size_; - + void run(int); void generateIntrinsicParams(); }; @@ -66,14 +66,14 @@ int calcDistance(const vector& set1, const vector& set2, doubl { return 0; } - + std::vector indices; double sum_dist = 0.0; for(size_t i = 0; i < set1.size(); i++) { double min_dist = std::numeric_limits::max(); int min_idx = -1; - + for(int j = 0; j < (int)set2.size(); j++) { double dist = norm(set1[i] - set2[j]); @@ -83,33 +83,33 @@ int calcDistance(const vector& set1, const vector& set2, doubl min_dist = dist; } } - + // check validity of min_idx if(min_idx == -1) { return 0; } std::vector::iterator it = std::find(indices.begin(), indices.end(), min_idx); - if(it != indices.end()) + if(it != indices.end()) { // there are two points in set1 corresponding to the same point in set2 return 0; } indices.push_back(min_idx); - + // printf("dist %d = %f\n", (int)i, min_dist); - + sum_dist += min_dist*min_dist; } - + mean_dist = sqrt(sum_dist/set1.size()); // printf("sum_dist = %f, set1.size() = %d, mean_dist = %f\n", sum_dist, (int)set1.size(), mean_dist); - + return 1; } CV_ChessboardSubpixelTest::CV_ChessboardSubpixelTest() : - intrinsic_matrix_(Size(3, 3), CV_64FC1), distortion_coeffs_(Size(1, 4), CV_64FC1), + intrinsic_matrix_(Size(3, 3), CV_64FC1), distortion_coeffs_(Size(1, 4), CV_64FC1), image_size_(640, 480) { } @@ -121,13 +121,13 @@ void CV_ChessboardSubpixelTest::run( int ) int progress = 0; RNG& rng = ts->get_rng(); - + const int runs_count = 20; const int max_pattern_size = 8; const int min_pattern_size = 5; Mat bg(image_size_, CV_8UC1); bg = Scalar(0); - + double sum_dist = 0.0; int count = 0; for(int i = 0; i < runs_count; i++) @@ -144,13 +144,13 @@ void CV_ChessboardSubpixelTest::run( int ) pattern_size = Size(pattern_width, pattern_height); } ChessBoardGenerator gen_chessboard(Size(pattern_size.width + 1, pattern_size.height + 1)); - + // generates intrinsic camera and distortion matrices generateIntrinsicParams(); - + vector corners; - Mat chessboard_image = gen_chessboard(bg, intrinsic_matrix_, distortion_coeffs_, corners); - + Mat chessboard_image = gen_chessboard(bg, intrinsic_matrix_, distortion_coeffs_, corners); + vector test_corners; bool result = findChessboardCorners(chessboard_image, pattern_size, test_corners, 15); if(!result) @@ -158,47 +158,47 @@ void CV_ChessboardSubpixelTest::run( int ) #if 0 ts->printf(cvtest::TS::LOG, "Warning: chessboard was not detected! Writing image to test.jpg\n"); ts->printf(cvtest::TS::LOG, "Size = %d, %d\n", pattern_size.width, pattern_size.height); - ts->printf(cvtest::TS::LOG, "Intrinsic params: fx = %f, fy = %f, cx = %f, cy = %f\n", - intrinsic_matrix_.at(0, 0), intrinsic_matrix_.at(1, 1), + ts->printf(cvtest::TS::LOG, "Intrinsic params: fx = %f, fy = %f, cx = %f, cy = %f\n", + intrinsic_matrix_.at(0, 0), intrinsic_matrix_.at(1, 1), intrinsic_matrix_.at(0, 2), intrinsic_matrix_.at(1, 2)); - ts->printf(cvtest::TS::LOG, "Distortion matrix: %f, %f, %f, %f, %f\n", + ts->printf(cvtest::TS::LOG, "Distortion matrix: %f, %f, %f, %f, %f\n", distortion_coeffs_.at(0, 0), distortion_coeffs_.at(0, 1), - distortion_coeffs_.at(0, 2), distortion_coeffs_.at(0, 3), + distortion_coeffs_.at(0, 2), distortion_coeffs_.at(0, 3), distortion_coeffs_.at(0, 4)); - + imwrite("test.jpg", chessboard_image); #endif continue; } - + double dist1 = 0.0; int ret = calcDistance(corners, test_corners, dist1); if(ret == 0) { ts->printf(cvtest::TS::LOG, "findChessboardCorners returns invalid corner coordinates!\n"); code = cvtest::TS::FAIL_INVALID_OUTPUT; - break; + break; } - + IplImage chessboard_image_header = chessboard_image; - cvFindCornerSubPix(&chessboard_image_header, (CvPoint2D32f*)&test_corners[0], + cvFindCornerSubPix(&chessboard_image_header, (CvPoint2D32f*)&test_corners[0], (int)test_corners.size(), cvSize(3, 3), cvSize(1, 1), cvTermCriteria(CV_TERMCRIT_EPS|CV_TERMCRIT_ITER,300,0.1)); find4QuadCornerSubpix(chessboard_image, test_corners, Size(5, 5)); - + double dist2 = 0.0; ret = calcDistance(corners, test_corners, dist2); if(ret == 0) { ts->printf(cvtest::TS::LOG, "findCornerSubpix returns invalid corner coordinates!\n"); code = cvtest::TS::FAIL_INVALID_OUTPUT; - break; + break; } - - ts->printf(cvtest::TS::LOG, "Error after findChessboardCorners: %f, after findCornerSubPix: %f\n", + + ts->printf(cvtest::TS::LOG, "Error after findChessboardCorners: %f, after findCornerSubPix: %f\n", dist1, dist2); sum_dist += dist2; count++; - + const double max_reduce_factor = 0.8; if(dist1 < dist2*max_reduce_factor) { @@ -206,33 +206,33 @@ void CV_ChessboardSubpixelTest::run( int ) code = cvtest::TS::FAIL_INVALID_OUTPUT; break; } - + progress = update_progress( progress, i-1, runs_count, 0 ); } sum_dist /= count; - ts->printf(cvtest::TS::LOG, "Average error after findCornerSubpix: %f\n", sum_dist); - + ts->printf(cvtest::TS::LOG, "Average error after findCornerSubpix: %f\n", sum_dist); + if( code < 0 ) ts->set_failed_test_info( code ); } - + void CV_ChessboardSubpixelTest::generateIntrinsicParams() { RNG& rng = ts->get_rng(); const double max_focus_length = 1000.0; const double max_focus_diff = 5.0; - + double fx = cvtest::randReal(rng)*max_focus_length; double fy = fx + cvtest::randReal(rng)*max_focus_diff; double cx = image_size_.width/2; double cy = image_size_.height/2; - + double k1 = 0.5*cvtest::randReal(rng); double k2 = 0.05*cvtest::randReal(rng); double p1 = 0.05*cvtest::randReal(rng); double p2 = 0.05*cvtest::randReal(rng); double k3 = 0.0; - + intrinsic_matrix_ = (Mat_(3, 3) << fx, 0.0, cx, 0.0, fy, cy, 0.0, 0.0, 1.0); distortion_coeffs_ = (Mat_(1, 5) << k1, k2, p1, p2, k3); } diff --git a/modules/core/src/system.cpp b/modules/core/src/system.cpp index 0c752020d..439d0bf1c 100644 --- a/modules/core/src/system.cpp +++ b/modules/core/src/system.cpp @@ -473,20 +473,59 @@ string format( const char* fmt, ... ) string tempfile( const char* suffix ) { - char buf[L_tmpnam]; - char* name = 0; -#ifdef ANDROID - strcpy(buf, "/sdcard/__opencv_temp_XXXXXX"); - name = mktemp(buf); -#else - name = tmpnam(buf); -#endif - if (*name == '\\') - ++name; - string n(name); - if (suffix != 0) - n += (n[n.size()-1] == '.' && suffix[0] == '.' ? suffix + 1 : suffix); - return n; +#if defined WIN32 || defined _WIN32 + char temp_dir[MAX_PATH + 1] = { 0 }; + char temp_file[MAX_PATH + 1] = { 0 }; + + ::GetTempPathA(sizeof(temp_dir), temp_dir); + if(0 != ::GetTempFileNameA(temp_dir, "__opencv_temp.", 0, temp_file)) + return string(); + + string name = temp_file; + if(suffix) + { + if (suffix[0] != '.') + return name + "." + suffix; + else + return name + suffix; + } + else + return name; +# else +# ifdef ANDROID + //char defaultTemplate[] = "/mnt/sdcard/__opencv_temp.XXXXXX"; + char defaultTemplate[] = "/data/local/tmp/__opencv_temp.XXXXXX"; +# else + char defaultTemplate[] = "/tmp/__opencv_temp.XXXXXX"; +# endif + + string fname; + const char *temp_dir = getenv("OPENCV_TEMP_PATH"); + if(temp_dir == 0 || temp_dir[0] == 0) + fname = defaultTemplate; + else + { + fname = temp_dir; + char ech = fname[fname.size() - 1]; + if(ech != '/' && ech != '\\') + fname += "/"; + fname += "__opencv_temp.XXXXXX"; + } + + const int fd = mkstemp((char*)fname.c_str()); + if(fd == -1) return ""; + close(fd); + remove(fname.c_str()); + + if(suffix) + { + if (suffix[0] != '.') + fname = fname + "." + suffix; + else + fname += suffix; + } + return fname; +# endif } static CvErrorCallback customErrorCallback = 0; diff --git a/modules/core/test/test_arithm.cpp b/modules/core/test/test_arithm.cpp index fc07bd843..875b84906 100644 --- a/modules/core/test/test_arithm.cpp +++ b/modules/core/test/test_arithm.cpp @@ -27,23 +27,23 @@ struct BaseElemWiseOp minval = depth < CV_32S ? cvtest::getMinVal(depth) : depth == CV_32S ? -1000000 : -1000.; maxval = depth < CV_32S ? cvtest::getMaxVal(depth) : depth == CV_32S ? 1000000 : 1000.; } - + virtual void getRandomSize(RNG& rng, vector& size) { cvtest::randomSize(rng, 2, ARITHM_MAX_NDIMS, cvtest::ARITHM_MAX_SIZE_LOG, size); } - + virtual int getRandomType(RNG& rng) { return cvtest::randomType(rng, DEPTH_MASK_ALL_BUT_8S, 1, ninputs > 1 ? ARITHM_MAX_CHANNELS : 4); } - - virtual double getMaxErr(int depth) { return depth < CV_32F ? 1 : depth == CV_32F ? 1e-5 : 1e-12; } + + virtual double getMaxErr(int depth) { return depth < CV_32F ? 1 : depth == CV_32F ? 1e-5 : 1e-12; } virtual void generateScalars(int depth, RNG& rng) { const double m = 3.; - + if( !(flags & FIX_ALPHA) ) { alpha = exp(rng.uniform(-0.5, 0.1)*m*2*CV_LOG2); @@ -54,7 +54,7 @@ struct BaseElemWiseOp beta = exp(rng.uniform(-0.5, 0.1)*m*2*CV_LOG2); beta *= rng.uniform(0, 2) ? 1 : -1; } - + if( !(flags & FIX_GAMMA) ) { for( int i = 0; i < 4; i++ ) @@ -65,25 +65,25 @@ struct BaseElemWiseOp if( flags & REAL_GAMMA ) gamma = Scalar::all(gamma[0]); } - + if( depth == CV_32F ) { Mat fl, db; - + db = Mat(1, 1, CV_64F, &alpha); db.convertTo(fl, CV_32F); fl.convertTo(db, CV_64F); - + db = Mat(1, 1, CV_64F, &beta); db.convertTo(fl, CV_32F); fl.convertTo(db, CV_64F); - + db = Mat(1, 4, CV_64F, &gamma[0]); db.convertTo(fl, CV_32F); fl.convertTo(db, CV_64F); } } - + int ninputs; int flags; double alpha; @@ -98,7 +98,7 @@ struct BaseAddOp : public BaseElemWiseOp { BaseAddOp(int _ninputs, int _flags, double _alpha, double _beta, Scalar _gamma=Scalar::all(0)) : BaseElemWiseOp(_ninputs, _flags, _alpha, _beta, _gamma) {} - + void refop(const vector& src, Mat& dst, const Mat& mask) { Mat temp; @@ -214,7 +214,7 @@ struct MulOp : public BaseElemWiseOp { return depth <= CV_32S ? 2 : depth < CV_64F ? 1e-5 : 1e-12; } -}; +}; struct DivOp : public BaseElemWiseOp { @@ -231,7 +231,7 @@ struct DivOp : public BaseElemWiseOp { return depth <= CV_32S ? 2 : depth < CV_64F ? 1e-5 : 1e-12; } -}; +}; struct RecipOp : public BaseElemWiseOp { @@ -248,8 +248,8 @@ struct RecipOp : public BaseElemWiseOp { return depth <= CV_32S ? 2 : depth < CV_64F ? 1e-5 : 1e-12; } -}; - +}; + struct AbsDiffOp : public BaseAddOp { AbsDiffOp() : BaseAddOp(2, FIX_ALPHA+FIX_BETA+FIX_GAMMA, 1, -1, Scalar::all(0)) {}; @@ -354,7 +354,7 @@ struct MinOp : public BaseElemWiseOp { return 0; } -}; +}; struct MaxOp : public BaseElemWiseOp { @@ -371,7 +371,7 @@ struct MaxOp : public BaseElemWiseOp { return 0; } -}; +}; struct MinSOp : public BaseElemWiseOp { @@ -388,7 +388,7 @@ struct MinSOp : public BaseElemWiseOp { return 0; } -}; +}; struct MaxSOp : public BaseElemWiseOp { @@ -406,7 +406,7 @@ struct MaxSOp : public BaseElemWiseOp return 0; } }; - + struct CmpOp : public BaseElemWiseOp { CmpOp() : BaseElemWiseOp(2, FIX_ALPHA+FIX_BETA+FIX_GAMMA, 1, 1, Scalar::all(0)) {}; @@ -427,7 +427,7 @@ struct CmpOp : public BaseElemWiseOp { return cvtest::randomType(rng, DEPTH_MASK_ALL_BUT_8S, 1, 1); } - + double getMaxErr(int) { return 0; @@ -462,9 +462,9 @@ struct CmpSOp : public BaseElemWiseOp return 0; } int cmpop; -}; +}; + - struct CopyOp : public BaseElemWiseOp { CopyOp() : BaseElemWiseOp(1, FIX_ALPHA+FIX_BETA+FIX_GAMMA+SUPPORT_MASK, 1, 1, Scalar::all(0)) {}; @@ -487,7 +487,7 @@ struct CopyOp : public BaseElemWiseOp int cmpop; }; - + struct SetOp : public BaseElemWiseOp { SetOp() : BaseElemWiseOp(0, FIX_ALPHA+FIX_BETA+SUPPORT_MASK, 1, 1, Scalar::all(0)) {}; @@ -507,7 +507,7 @@ struct SetOp : public BaseElemWiseOp { return 0; } -}; +}; template static void inRangeS_(const _Tp* src, const _WTp* a, const _WTp* b, uchar* dst, size_t total, int cn) @@ -547,7 +547,7 @@ template static void inRange_(const _Tp* src, const _Tp* a, const } } } - + static void inRange(const Mat& src, const Mat& lb, const Mat& rb, Mat& dst) { @@ -556,19 +556,19 @@ static void inRange(const Mat& src, const Mat& lb, const Mat& rb, Mat& dst) dst.create( src.dims, &src.size[0], CV_8U ); const Mat *arrays[]={&src, &lb, &rb, &dst, 0}; Mat planes[4]; - + NAryMatIterator it(arrays, planes); size_t total = planes[0].total(); size_t i, nplanes = it.nplanes; - int depth = src.depth(), cn = src.channels(); - + int depth = src.depth(), cn = src.channels(); + for( i = 0; i < nplanes; i++, ++it ) { const uchar* sptr = planes[0].data; const uchar* aptr = planes[1].data; const uchar* bptr = planes[2].data; uchar* dptr = planes[3].data; - + switch( depth ) { case CV_8U: @@ -604,21 +604,21 @@ static void inRangeS(const Mat& src, const Scalar& lb, const Scalar& rb, Mat& ds dst.create( src.dims, &src.size[0], CV_8U ); const Mat *arrays[]={&src, &dst, 0}; Mat planes[2]; - + NAryMatIterator it(arrays, planes); size_t total = planes[0].total(); size_t i, nplanes = it.nplanes; - int depth = src.depth(), cn = src.channels(); + int depth = src.depth(), cn = src.channels(); union { double d[4]; float f[4]; int i[4];} lbuf, rbuf; int wtype = CV_MAKETYPE(depth <= CV_32S ? CV_32S : depth, cn); scalarToRawData(lb, lbuf.d, wtype, cn); scalarToRawData(rb, rbuf.d, wtype, cn); - + for( i = 0; i < nplanes; i++, ++it ) { const uchar* sptr = planes[0].data; uchar* dptr = planes[1].data; - + switch( depth ) { case CV_8U: @@ -647,8 +647,8 @@ static void inRangeS(const Mat& src, const Scalar& lb, const Scalar& rb, Mat& ds } } } - - + + struct InRangeSOp : public BaseElemWiseOp { InRangeSOp() : BaseElemWiseOp(1, FIX_ALPHA+FIX_BETA, 1, 1, Scalar::all(0)) {}; @@ -676,9 +676,9 @@ struct InRangeSOp : public BaseElemWiseOp } } Scalar gamma1; -}; +}; + - struct InRangeOp : public BaseElemWiseOp { InRangeOp() : BaseElemWiseOp(3, FIX_ALPHA+FIX_BETA+FIX_GAMMA, 1, 1, Scalar::all(0)) {}; @@ -687,7 +687,7 @@ struct InRangeOp : public BaseElemWiseOp Mat lb, rb; cvtest::min(src[1], src[2], lb); cvtest::max(src[1], src[2], rb); - + cv::inRange(src[0], lb, rb, dst); } void refop(const vector& src, Mat& dst, const Mat&) @@ -695,16 +695,16 @@ struct InRangeOp : public BaseElemWiseOp Mat lb, rb; cvtest::min(src[1], src[2], lb); cvtest::max(src[1], src[2], rb); - + cvtest::inRange(src[0], lb, rb, dst); } double getMaxErr(int) { return 0; } -}; - - +}; + + struct ConvertScaleOp : public BaseElemWiseOp { ConvertScaleOp() : BaseElemWiseOp(1, FIX_BETA+REAL_GAMMA, 1, 1, Scalar::all(0)), ddepth(0) { }; @@ -739,7 +739,7 @@ struct ConvertScaleOp : public BaseElemWiseOp int ddepth; }; - + struct ConvertScaleAbsOp : public BaseElemWiseOp { ConvertScaleAbsOp() : BaseElemWiseOp(1, FIX_BETA+REAL_GAMMA, 1, 1, Scalar::all(0)) {}; @@ -767,13 +767,13 @@ struct ConvertScaleAbsOp : public BaseElemWiseOp } }; - + static void flip(const Mat& src, Mat& dst, int flipcode) { CV_Assert(src.dims == 2); dst.create(src.size(), src.type()); int i, j, k, esz = (int)src.elemSize(), width = src.cols*esz; - + for( i = 0; i < dst.rows; i++ ) { const uchar* sptr = src.ptr(flipcode == 1 ? i : dst.rows - i - 1); @@ -796,7 +796,7 @@ static void setIdentity(Mat& dst, const Scalar& s) double buf[4]; scalarToRawData(s, buf, dst.type(), 0); int i, k, esz = (int)dst.elemSize(), width = dst.cols*esz; - + for( i = 0; i < dst.rows; i++ ) { uchar* dptr = dst.ptr(i); @@ -807,7 +807,7 @@ static void setIdentity(Mat& dst, const Scalar& s) } } - + struct FlipOp : public BaseElemWiseOp { FlipOp() : BaseElemWiseOp(1, FIX_ALPHA+FIX_BETA+FIX_GAMMA, 1, 1, Scalar::all(0)) {}; @@ -853,8 +853,8 @@ struct TransposeOp : public BaseElemWiseOp { return 0; } -}; - +}; + struct SetIdentityOp : public BaseElemWiseOp { SetIdentityOp() : BaseElemWiseOp(0, FIX_ALPHA+FIX_BETA, 1, 1, Scalar::all(0)) {}; @@ -874,7 +874,7 @@ struct SetIdentityOp : public BaseElemWiseOp { return 0; } -}; +}; struct SetZeroOp : public BaseElemWiseOp { @@ -893,23 +893,23 @@ struct SetZeroOp : public BaseElemWiseOp } }; - + static void exp(const Mat& src, Mat& dst) { dst.create( src.dims, &src.size[0], src.type() ); const Mat *arrays[]={&src, &dst, 0}; Mat planes[2]; - + NAryMatIterator it(arrays, planes); size_t j, total = planes[0].total()*src.channels(); size_t i, nplanes = it.nplanes; - int depth = src.depth(); - + int depth = src.depth(); + for( i = 0; i < nplanes; i++, ++it ) { const uchar* sptr = planes[0].data; uchar* dptr = planes[1].data; - + if( depth == CV_32F ) { for( j = 0; j < total; j++ ) @@ -920,7 +920,7 @@ static void exp(const Mat& src, Mat& dst) for( j = 0; j < total; j++ ) ((double*)dptr)[j] = std::exp(((const double*)sptr)[j]); } - } + } } static void log(const Mat& src, Mat& dst) @@ -928,17 +928,17 @@ static void log(const Mat& src, Mat& dst) dst.create( src.dims, &src.size[0], src.type() ); const Mat *arrays[]={&src, &dst, 0}; Mat planes[2]; - + NAryMatIterator it(arrays, planes); size_t j, total = planes[0].total()*src.channels(); size_t i, nplanes = it.nplanes; - int depth = src.depth(); - + int depth = src.depth(); + for( i = 0; i < nplanes; i++, ++it ) { const uchar* sptr = planes[0].data; uchar* dptr = planes[1].data; - + if( depth == CV_32F ) { for( j = 0; j < total; j++ ) @@ -949,9 +949,9 @@ static void log(const Mat& src, Mat& dst) for( j = 0; j < total; j++ ) ((double*)dptr)[j] = std::log(fabs(((const double*)sptr)[j])); } - } -} - + } +} + struct ExpOp : public BaseElemWiseOp { ExpOp() : BaseElemWiseOp(1, FIX_ALPHA+FIX_BETA+FIX_GAMMA, 1, 1, Scalar::all(0)) {}; @@ -976,7 +976,7 @@ struct ExpOp : public BaseElemWiseOp { return depth == CV_32F ? 1e-5 : 1e-12; } -}; +}; struct LogOp : public BaseElemWiseOp @@ -1018,13 +1018,13 @@ static void cartToPolar(const Mat& mx, const Mat& my, Mat& mmag, Mat& mangle, bo mangle.create( mx.dims, &mx.size[0], mx.type() ); const Mat *arrays[]={&mx, &my, &mmag, &mangle, 0}; Mat planes[4]; - + NAryMatIterator it(arrays, planes); size_t j, total = planes[0].total(); size_t i, nplanes = it.nplanes; - int depth = mx.depth(); + int depth = mx.depth(); double scale = angleInDegrees ? 180/CV_PI : 1; - + for( i = 0; i < nplanes; i++, ++it ) { if( depth == CV_32F ) @@ -1033,7 +1033,7 @@ static void cartToPolar(const Mat& mx, const Mat& my, Mat& mmag, Mat& mangle, bo const float* yptr = (const float*)planes[1].data; float* mptr = (float*)planes[2].data; float* aptr = (float*)planes[3].data; - + for( j = 0; j < total; j++ ) { mptr[j] = std::sqrt(xptr[j]*xptr[j] + yptr[j]*yptr[j]); @@ -1048,7 +1048,7 @@ static void cartToPolar(const Mat& mx, const Mat& my, Mat& mmag, Mat& mangle, bo const double* yptr = (const double*)planes[1].data; double* mptr = (double*)planes[2].data; double* aptr = (double*)planes[3].data; - + for( j = 0; j < total; j++ ) { mptr[j] = std::sqrt(xptr[j]*xptr[j] + yptr[j]*yptr[j]); @@ -1059,8 +1059,8 @@ static void cartToPolar(const Mat& mx, const Mat& my, Mat& mmag, Mat& mangle, bo } } } - - + + struct CartToPolarToCartOp : public BaseElemWiseOp { CartToPolarToCartOp() : BaseElemWiseOp(2, FIX_ALPHA+FIX_BETA+FIX_GAMMA, 1, 1, Scalar::all(0)) @@ -1075,10 +1075,10 @@ struct CartToPolarToCartOp : public BaseElemWiseOp void op(const vector& src, Mat& dst, const Mat&) { Mat mag, angle, x, y; - + cv::cartToPolar(src[0], src[1], mag, angle, angleInDegrees); cv::polarToCart(mag, angle, x, y, angleInDegrees); - + Mat msrc[] = {mag, angle, x, y}; int pairs[] = {0, 0, 1, 1, 2, 2, 3, 3}; dst.create(src[0].dims, src[0].size, CV_MAKETYPE(src[0].depth(), 4)); @@ -1103,8 +1103,8 @@ struct CartToPolarToCartOp : public BaseElemWiseOp } bool angleInDegrees; }; - - + + struct MeanOp : public BaseElemWiseOp { MeanOp() : BaseElemWiseOp(1, FIX_ALPHA+FIX_BETA+FIX_GAMMA+SUPPORT_MASK+SCALAR_OUTPUT, 1, 1, Scalar::all(0)) @@ -1125,7 +1125,7 @@ struct MeanOp : public BaseElemWiseOp { return 1e-6; } -}; +}; struct SumOp : public BaseElemWiseOp @@ -1148,9 +1148,9 @@ struct SumOp : public BaseElemWiseOp { return 1e-5; } -}; +}; + - struct CountNonZeroOp : public BaseElemWiseOp { CountNonZeroOp() : BaseElemWiseOp(1, FIX_ALPHA+FIX_BETA+FIX_GAMMA+SCALAR_OUTPUT+SUPPORT_MASK, 1, 1, Scalar::all(0)) @@ -1181,9 +1181,9 @@ struct CountNonZeroOp : public BaseElemWiseOp { return 0; } -}; +}; + - struct MeanStdDevOp : public BaseElemWiseOp { Scalar sqmeanRef; @@ -1206,13 +1206,13 @@ struct MeanStdDevOp : public BaseElemWiseOp cvtest::multiply(temp, temp, temp); Scalar mean = cvtest::mean(src[0], mask); Scalar sqmean = cvtest::mean(temp, mask); - + sqmeanRef = sqmean; cn = temp.channels(); for( int c = 0; c < 4; c++ ) - sqmean[c] = std::sqrt(std::max(sqmean[c] - mean[c]*mean[c], 0.)); - + sqmean[c] = std::sqrt(std::max(sqmean[c] - mean[c]*mean[c], 0.)); + dst.create(1, 2, CV_64FC4); dst.at(0,0) = mean; dst.at(0,1) = sqmean; @@ -1225,9 +1225,9 @@ struct MeanStdDevOp : public BaseElemWiseOp err = std::max(err, sqmeanRef[i]); return 3e-7 * err; } -}; +}; + - struct NormOp : public BaseElemWiseOp { NormOp() : BaseElemWiseOp(2, FIX_ALPHA+FIX_BETA+FIX_GAMMA+SUPPORT_MASK+SCALAR_OUTPUT, 1, 1, Scalar::all(0)) @@ -1272,7 +1272,7 @@ struct NormOp : public BaseElemWiseOp return 1e-6; } int normType; -}; +}; struct MinMaxLocOp : public BaseElemWiseOp @@ -1290,7 +1290,7 @@ struct MinMaxLocOp : public BaseElemWiseOp { int i, ndims = (int)minidx.size(); dst.create(1, ndims*2 + 2, CV_64FC1); - + for( i = 0; i < ndims; i++ ) { dst.at(0,i) = minidx[i]; @@ -1319,9 +1319,9 @@ struct MinMaxLocOp : public BaseElemWiseOp { return 0; } -}; - - +}; + + } typedef Ptr ElemWiseOpPtr; @@ -1330,7 +1330,7 @@ class ElemWiseTest : public ::testing::TestWithParam {}; TEST_P(ElemWiseTest, accuracy) { ElemWiseOpPtr op = GetParam(); - + int testIdx = 0; RNG rng((uint64)cvtest::ARITHM_RNG_SEED); for( testIdx = 0; testIdx < cvtest::ARITHM_NTESTS; testIdx++ ) @@ -1340,7 +1340,7 @@ TEST_P(ElemWiseTest, accuracy) int type = op->getRandomType(rng); int depth = CV_MAT_DEPTH(type); bool haveMask = (op->flags & cvtest::BaseElemWiseOp::SUPPORT_MASK) != 0 && rng.uniform(0, 4) == 0; - + double minval=0, maxval=0; op->getValueRange(depth, minval, maxval); int i, ninputs = op->ninputs; @@ -1350,7 +1350,7 @@ TEST_P(ElemWiseTest, accuracy) Mat dst0, dst, mask; if( haveMask ) mask = cvtest::randomMat(rng, size, CV_8U, 0, 2, true); - + if( (haveMask || ninputs == 0) && !(op->flags & cvtest::BaseElemWiseOp::SCALAR_OUTPUT)) { dst0 = cvtest::randomMat(rng, size, type, minval, maxval, false); @@ -1358,17 +1358,17 @@ TEST_P(ElemWiseTest, accuracy) cvtest::copy(dst, dst0); } op->generateScalars(depth, rng); - + op->refop(src, dst0, mask); op->op(src, dst, mask); - + double maxErr = op->getMaxErr(depth); vector pos; - ASSERT_PRED_FORMAT2(cvtest::MatComparator(maxErr, op->context), dst0, dst) << "\nsrc[0] ~ " << cvtest::MatInfo(!src.empty() ? src[0] : Mat()) << "\ntestCase #" << testIdx << "\n"; + ASSERT_PRED_FORMAT2(cvtest::MatComparator(maxErr, op->context), dst0, dst) << "\nsrc[0] ~ " << cvtest::MatInfo(!src.empty() ? src[0] : Mat()) << "\ntestCase #" << testIdx << "\n"; } } - + INSTANTIATE_TEST_CASE_P(Core_Copy, ElemWiseTest, ::testing::Values(ElemWiseOpPtr(new cvtest::CopyOp))); INSTANTIATE_TEST_CASE_P(Core_Set, ElemWiseTest, ::testing::Values(ElemWiseOpPtr(new cvtest::SetOp))); INSTANTIATE_TEST_CASE_P(Core_SetZero, ElemWiseTest, ::testing::Values(ElemWiseOpPtr(new cvtest::SetZeroOp))); @@ -1429,7 +1429,7 @@ class CV_ArithmMaskTest : public cvtest::BaseTest { public: CV_ArithmMaskTest() {} - ~CV_ArithmMaskTest() {} + ~CV_ArithmMaskTest() {} protected: void run(int) { @@ -1441,7 +1441,7 @@ protected: for( int iter = 0; iter < 100; iter++ ) { //ts->printf(cvtest::TS::LOG, "."); - + ts->update_context(this, iter, true); int k, dims = rng.uniform(1, MAX_DIM+1), p = 1; int depth = rng.uniform(CV_8U, CV_64F+1); @@ -1459,15 +1459,15 @@ protected: Mat mask(dims, sizes, CV_8U); Mat mask1; Mat c, d; - + rng.fill(a, RNG::UNIFORM, 0, 100); rng.fill(b, RNG::UNIFORM, 0, 100); - + // [-2,2) range means that the each generated random number // will be one of -2, -1, 0, 1. Saturated to [0,255], it will become // 0, 0, 0, 1 => the mask will be filled by ~25%. rng.fill(mask, RNG::UNIFORM, -2, 2); - + a.convertTo(a1, depth1); b.convertTo(b1, depth1); // invert the mask @@ -1504,7 +1504,7 @@ protected: d.convertTo(d1, depth); CV_Assert( norm(c, d1, CV_C) <= DBL_EPSILON ); } - + Mat_ tmpSrc(100,100); tmpSrc = 124; Mat_ tmpMask(100,100); diff --git a/modules/core/test/test_io.cpp b/modules/core/test/test_io.cpp index f290bab2a..6b55eb2bb 100644 --- a/modules/core/test/test_io.cpp +++ b/modules/core/test/test_io.cpp @@ -31,7 +31,7 @@ static SparseMat cvTsGetRandomSparseMat(int dims, const int* sz, int type, else *(double*)ptr = saturate_cast(val); } - + return m; } @@ -40,11 +40,11 @@ static bool cvTsCheckSparse(const CvSparseMat* m1, const CvSparseMat* m2, double CvSparseMatIterator it1; CvSparseNode* node1; int depth = CV_MAT_DEPTH(m1->type); - + if( m1->heap->active_count != m2->heap->active_count || m1->dims != m2->dims || CV_MAT_TYPE(m1->type) != CV_MAT_TYPE(m2->type) ) return false; - + for( node1 = cvInitSparseMatIterator( m1, &it1 ); node1 != 0; node1 = cvGetNextSparseNode( &it1 )) { @@ -75,7 +75,7 @@ static bool cvTsCheckSparse(const CvSparseMat* m1, const CvSparseMat* m2, double else if( fabs(*(double*)v1 - *(double*)v2) > eps*(fabs(*(double*)v2) + 1) ) return false; } - + return true; } @@ -94,27 +94,27 @@ protected: test_case_count = 4; int progress = 0; MemStorage storage(cvCreateMemStorage(0)); - + for( int idx = 0; idx < test_case_count; idx++ ) { ts->update_context( this, idx, false ); progress = update_progress( progress, idx, test_case_count, 0 ); - + cvClearMemStorage(storage); - + bool mem = (idx % 4) >= 2; string filename = tempfile(idx % 2 ? ".yml" : ".xml"); - + FileStorage fs(filename, FileStorage::WRITE + (mem ? FileStorage::MEMORY : 0)); - + int test_int = (int)cvtest::randInt(rng); double test_real = (cvtest::randInt(rng)%2?1:-1)*exp(cvtest::randReal(rng)*18-9); string test_string = "vw wv23424rt\"&<>&'@#$@$%$%&%IJUKYILFD@#$@%$&*&() "; - + int depth = cvtest::randInt(rng) % (CV_64F+1); int cn = cvtest::randInt(rng) % 4 + 1; Mat test_mat(cvtest::randInt(rng)%30+1, cvtest::randInt(rng)%30+1, CV_MAKETYPE(depth, cn)); - + rng0.fill(test_mat, CV_RAND_UNI, Scalar::all(ranges[depth][0]), Scalar::all(ranges[depth][1])); if( depth >= CV_32F ) { @@ -123,11 +123,11 @@ protected: rng0.fill(test_mat_scale, CV_RAND_UNI, Scalar::all(-1), Scalar::all(1)); multiply(test_mat, test_mat_scale, test_mat); } - + CvSeq* seq = cvCreateSeq(test_mat.type(), (int)sizeof(CvSeq), (int)test_mat.elemSize(), storage); - cvSeqPushMulti(seq, test_mat.data, test_mat.cols*test_mat.rows); - + cvSeqPushMulti(seq, test_mat.data, test_mat.cols*test_mat.rows); + CvGraph* graph = cvCreateGraph( CV_ORIENTED_GRAPH, sizeof(CvGraph), sizeof(CvGraphVtx), sizeof(CvGraphEdge), storage ); @@ -141,12 +141,12 @@ protected: cvGraphAddEdge(graph, edges[i][0], edges[i][1], 0, &edge); edge->weight = (float)(i+1); } - + depth = cvtest::randInt(rng) % (CV_64F+1); cn = cvtest::randInt(rng) % 4 + 1; int sz[] = {cvtest::randInt(rng)%10+1, cvtest::randInt(rng)%10+1, cvtest::randInt(rng)%10+1}; MatND test_mat_nd(3, sz, CV_MAKETYPE(depth, cn)); - + rng0.fill(test_mat_nd, CV_RAND_UNI, Scalar::all(ranges[depth][0]), Scalar::all(ranges[depth][1])); if( depth >= CV_32F ) { @@ -155,44 +155,44 @@ protected: rng0.fill(test_mat_scale, CV_RAND_UNI, Scalar::all(-1), Scalar::all(1)); multiply(test_mat_nd, test_mat_scale, test_mat_nd); } - + int ssz[] = {cvtest::randInt(rng)%10+1, cvtest::randInt(rng)%10+1, cvtest::randInt(rng)%10+1,cvtest::randInt(rng)%10+1}; SparseMat test_sparse_mat = cvTsGetRandomSparseMat(4, ssz, cvtest::randInt(rng)%(CV_64F+1), cvtest::randInt(rng) % 10000, 0, 100, rng); - + fs << "test_int" << test_int << "test_real" << test_real << "test_string" << test_string; fs << "test_mat" << test_mat; fs << "test_mat_nd" << test_mat_nd; fs << "test_sparse_mat" << test_sparse_mat; - + fs << "test_list" << "[" << 0.0000000000001 << 2 << CV_PI << -3435345 << "2-502 2-029 3egegeg" << "{:" << "month" << 12 << "day" << 31 << "year" << 1969 << "}" << "]"; fs << "test_map" << "{" << "x" << 1 << "y" << 2 << "width" << 100 << "height" << 200 << "lbp" << "[:"; - + const uchar arr[] = {0, 1, 1, 0, 1, 1, 0, 1}; fs.writeRaw("u", arr, (int)(sizeof(arr)/sizeof(arr[0]))); - + fs << "]" << "}"; cvWriteComment(*fs, "test comment", 0); - + fs.writeObj("test_seq", seq); fs.writeObj("test_graph",graph); CvGraph* graph2 = (CvGraph*)cvClone(graph); - + string content = fs.releaseAndGetString(); - + if(!fs.open(mem ? content : filename, FileStorage::READ + (mem ? FileStorage::MEMORY : 0))) { ts->printf( cvtest::TS::LOG, "filename %s can not be read\n", !mem ? filename.c_str() : content.c_str()); ts->set_failed_test_info( cvtest::TS::FAIL_MISSING_TEST_DATA ); return; } - + int real_int = (int)fs["test_int"]; double real_real = (double)fs["test_real"]; string real_string = (string)fs["test_string"]; - + if( real_int != test_int || fabs(real_real - test_real) > DBL_EPSILON*(fabs(test_real)+1) || real_string != test_string ) @@ -201,7 +201,7 @@ protected: ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_OUTPUT ); return; } - + CvMat* m = (CvMat*)fs["test_mat"].readObj(); CvMat _test_mat = test_mat; double max_diff = 0; @@ -209,7 +209,7 @@ protected: cvReshape(m, &stub1, 1, 0); cvReshape(&_test_mat, &_test_stub1, 1, 0); vector pt; - + if( !m || !CV_IS_MAT(m) || m->rows != test_mat.rows || m->cols != test_mat.cols || cvtest::cmpEps( Mat(&stub1), Mat(&_test_stub1), &max_diff, 0, &pt, true) < 0 ) { @@ -221,26 +221,26 @@ protected: } if( m && CV_IS_MAT(m)) cvReleaseMat(&m); - + CvMatND* m_nd = (CvMatND*)fs["test_mat_nd"].readObj(); CvMatND _test_mat_nd = test_mat_nd; - + if( !m_nd || !CV_IS_MATND(m_nd) ) { ts->printf( cvtest::TS::LOG, "the read nd-matrix is not correct\n" ); ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_OUTPUT ); return; } - + CvMat stub, _test_stub; cvGetMat(m_nd, &stub, 0, 1); cvGetMat(&_test_mat_nd, &_test_stub, 0, 1); cvReshape(&stub, &stub1, 1, 0); cvReshape(&_test_stub, &_test_stub1, 1, 0); - + if( !CV_ARE_TYPES_EQ(&stub, &_test_stub) || !CV_ARE_SIZES_EQ(&stub, &_test_stub) || - //cvNorm(&stub, &_test_stub, CV_L2) != 0 ) + //cvNorm(&stub, &_test_stub, CV_L2) != 0 ) cvtest::cmpEps( Mat(&stub1), Mat(&_test_stub1), &max_diff, 0, &pt, true) < 0 ) { ts->printf( cvtest::TS::LOG, "readObj method: the read nd matrix is not correct: (%.20g vs %.20g) vs at (%d,%d)\n", @@ -249,16 +249,16 @@ protected: ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_OUTPUT ); return; } - + MatND mat_nd2; fs["test_mat_nd"] >> mat_nd2; CvMatND m_nd2 = mat_nd2; cvGetMat(&m_nd2, &stub, 0, 1); cvReshape(&stub, &stub1, 1, 0); - + if( !CV_ARE_TYPES_EQ(&stub, &_test_stub) || !CV_ARE_SIZES_EQ(&stub, &_test_stub) || - //cvNorm(&stub, &_test_stub, CV_L2) != 0 ) + //cvNorm(&stub, &_test_stub, CV_L2) != 0 ) cvtest::cmpEps( Mat(&stub1), Mat(&_test_stub1), &max_diff, 0, &pt, true) < 0 ) { ts->printf( cvtest::TS::LOG, "C++ method: the read nd matrix is not correct: (%.20g vs %.20g) vs at (%d,%d)\n", @@ -267,16 +267,16 @@ protected: ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_OUTPUT ); return; } - + cvRelease((void**)&m_nd); - + Ptr m_s = (CvSparseMat*)fs["test_sparse_mat"].readObj(); Ptr _test_sparse_ = (CvSparseMat*)test_sparse_mat; Ptr _test_sparse = (CvSparseMat*)cvClone(_test_sparse_); SparseMat m_s2; fs["test_sparse_mat"] >> m_s2; Ptr _m_s2 = (CvSparseMat*)m_s2; - + if( !m_s || !CV_IS_SPARSE_MAT(m_s) || !cvTsCheckSparse(m_s, _test_sparse,0) || !cvTsCheckSparse(_m_s2, _test_sparse,0)) @@ -285,7 +285,7 @@ protected: ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_OUTPUT ); return; } - + FileNode tl = fs["test_list"]; if( tl.type() != FileNode::SEQ || tl.size() != 6 || fabs((double)tl[0] - 0.0000000000001) >= DBL_EPSILON || @@ -302,15 +302,15 @@ protected: ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_OUTPUT ); return; } - + FileNode tm = fs["test_map"]; FileNode tm_lbp = tm["lbp"]; - + int real_x = (int)tm["x"]; int real_y = (int)tm["y"]; int real_width = (int)tm["width"]; int real_height = (int)tm["height"]; - + int real_lbp_val = 0; FileNodeIterator it; it = tm_lbp.begin(); @@ -332,7 +332,7 @@ protected: real_lbp_val |= (int)*it2 << 4; it2 += -1; CV_Assert( it == it2 ); - + if( tm.type() != FileNode::MAP || tm.size() != 5 || real_x != 1 || real_y != 2 || @@ -346,7 +346,7 @@ protected: ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_OUTPUT ); return; } - + CvGraph* graph3 = (CvGraph*)fs["test_graph"].readObj(); if(graph2->active_count != vcount || graph3->active_count != vcount || graph2->edges->active_count != ecount || graph3->edges->active_count != ecount) @@ -355,7 +355,7 @@ protected: ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_OUTPUT ); return; } - + for( i = 0; i < ecount; i++ ) { CvGraphEdge* edge2 = cvFindGraphEdge(graph2, edges[i][0], edges[i][1]); @@ -368,7 +368,7 @@ protected: return; } } - + fs.release(); if( !mem ) remove(filename.c_str()); @@ -383,13 +383,14 @@ class CV_MiscIOTest : public cvtest::BaseTest { public: CV_MiscIOTest() {} - ~CV_MiscIOTest() {} + ~CV_MiscIOTest() {} protected: void run(int) { try { - FileStorage fs("test.xml", FileStorage::WRITE); + string fname = cv::tempfile(".xml"); + FileStorage fs(fname, FileStorage::WRITE); vector mi, mi2, mi3, mi4; vector mv, mv2, mv3, mv4; Mat m(10, 9, CV_32F); @@ -403,7 +404,7 @@ protected: fs << "mv3" << mv3; fs << "empty" << empty; fs.release(); - fs.open("test.xml", FileStorage::READ); + fs.open(fname, FileStorage::READ); fs["mi"] >> mi2; fs["mv"] >> mv2; fs["mi3"] >> mi4; @@ -429,7 +430,7 @@ TEST(Core_InputOutput, misc) { CV_MiscIOTest test; test.safe_run(); } { public: CV_BigMatrixIOTest() {} - ~CV_BigMatrixIOTest() {} + ~CV_BigMatrixIOTest() {} protected: void run(int) { @@ -439,7 +440,7 @@ protected: int N = 1000, M = 1200000; Mat mat(M, N, CV_32F); rng.fill(mat, RNG::UNIFORM, 0, 1); - FileStorage fs("test.xml", FileStorage::WRITE); + FileStorage fs(cv::tempfile(".xml"), FileStorage::WRITE); fs << "mat" << mat; fs.release(); } diff --git a/modules/features2d/include/opencv2/features2d/features2d.hpp b/modules/features2d/include/opencv2/features2d/features2d.hpp index c32486363..888c2daa4 100644 --- a/modules/features2d/include/opencv2/features2d/features2d.hpp +++ b/modules/features2d/include/opencv2/features2d/features2d.hpp @@ -328,7 +328,7 @@ public: float patternScale = 22.0f, int nOctaves = 4, const vector& selectedPairs = vector()); - FREAK( const FREAK& rhs ); + FREAK( const FREAK& rhs ); FREAK& operator=( const FREAK& ); virtual ~FREAK(); @@ -349,51 +349,51 @@ public: vector selectPairs( const vector& images, vector >& keypoints, const double corrThresh = 0.7, bool verbose = true ); - AlgorithmInfo* info() const; + AlgorithmInfo* info() const; - enum - { - NB_SCALES = 64, NB_PAIRS = 512, NB_ORIENPAIRS = 45 - }; + enum + { + NB_SCALES = 64, NB_PAIRS = 512, NB_ORIENPAIRS = 45 + }; protected: virtual void computeImpl( const Mat& image, vector& keypoints, Mat& descriptors ) const; - void buildPattern(); - uchar meanIntensity( const Mat& image, const Mat& integral, const float kp_x, const float kp_y, + void buildPattern(); + uchar meanIntensity( const Mat& image, const Mat& integral, const float kp_x, const float kp_y, const unsigned int scale, const unsigned int rot, const unsigned int point ) const; - bool orientationNormalized; //true if the orientation is normalized, false otherwise + bool orientationNormalized; //true if the orientation is normalized, false otherwise bool scaleNormalized; //true if the scale is normalized, false otherwise double patternScale; //scaling of the pattern int nOctaves; //number of octaves bool extAll; // true if all pairs need to be extracted for pairs selection - + double patternScale0; int nOctaves0; vector selectedPairs0; - struct PatternPoint - { - float x; // x coordinate relative to center - float y; // x coordinate relative to center - float sigma; // Gaussian smoothing sigma - }; + struct PatternPoint + { + float x; // x coordinate relative to center + float y; // x coordinate relative to center + float sigma; // Gaussian smoothing sigma + }; - struct DescriptionPair - { - uchar i; // index of the first point - uchar j; // index of the second point - }; + struct DescriptionPair + { + uchar i; // index of the first point + uchar j; // index of the second point + }; - struct OrientationPair - { - uchar i; // index of the first point - uchar j; // index of the second point - int weight_dx; // dx/(norm_sq))*4096 - int weight_dy; // dy/(norm_sq))*4096 - }; - - vector patternLookup; // look-up table for the pattern points (position+sigma of all points at all scales and orientation) + struct OrientationPair + { + uchar i; // index of the first point + uchar j; // index of the second point + int weight_dx; // dx/(norm_sq))*4096 + int weight_dy; // dy/(norm_sq))*4096 + }; + + vector patternLookup; // look-up table for the pattern points (position+sigma of all points at all scales and orientation) int patternSizes[NB_SCALES]; // size of the pattern at a specific scale (used to check if a point is within image boundaries) DescriptionPair descriptionPairs[NB_PAIRS]; OrientationPair orientationPairs[NB_ORIENPAIRS]; @@ -603,7 +603,7 @@ public: // TODO implement read/write virtual bool empty() const; - + AlgorithmInfo* info() const; protected: @@ -641,8 +641,8 @@ protected: class CV_EXPORTS AdjusterAdapter: public FeatureDetector { public: - /** pure virtual interface - */ + /** pure virtual interface + */ virtual ~AdjusterAdapter() {} /** too few features were detected so, adjust the detector params accordingly * \param min the minimum number of desired features @@ -682,7 +682,7 @@ public: /** \param adjuster an AdjusterAdapter that will do the detection and parameter adjustment * \param max_features the maximum desired number of features * \param max_iters the maximum number of times to try to adjust the feature detector params - * for the FastAdjuster this can be high, but with Star or Surf this can get time consuming + * for the FastAdjuster this can be high, but with Star or Surf this can get time consuming * \param min_features the minimum desired features */ DynamicAdaptedFeatureDetector( const Ptr& adjuster, int min_features=400, int max_features=500, int max_iters=5 ); @@ -693,8 +693,8 @@ protected: virtual void detectImpl( const Mat& image, vector& keypoints, const Mat& mask=Mat() ) const; private: - DynamicAdaptedFeatureDetector& operator=(const DynamicAdaptedFeatureDetector&); - DynamicAdaptedFeatureDetector(const DynamicAdaptedFeatureDetector&); + DynamicAdaptedFeatureDetector& operator=(const DynamicAdaptedFeatureDetector&); + DynamicAdaptedFeatureDetector(const DynamicAdaptedFeatureDetector&); int escape_iters_; int min_features_, max_features_; @@ -792,7 +792,7 @@ public: virtual bool empty() const; protected: - virtual void computeImpl( const Mat& image, vector& keypoints, Mat& descriptors ) const; + virtual void computeImpl( const Mat& image, vector& keypoints, Mat& descriptors ) const; Ptr descriptorExtractor; }; @@ -962,7 +962,7 @@ class CV_EXPORTS_W DescriptorMatcher : public Algorithm public: virtual ~DescriptorMatcher(); - /* + /* * Add descriptors to train descriptor collection. * descriptors Descriptors to add. Each descriptors[i] is a descriptors set from one image. */ @@ -1078,7 +1078,7 @@ protected: static bool isMaskedOut( const vector& masks, int queryIdx ); static Mat clone_op( Mat m ) { return m.clone(); } - void checkMasks( const vector& masks, int queryDescriptorsCount ) const; + void checkMasks( const vector& masks, int queryDescriptorsCount ) const; // Collection of descriptors from train images. vector trainDescCollection; diff --git a/modules/features2d/test/test_fast.cpp b/modules/features2d/test/test_fast.cpp index 416fe14c3..d991a2905 100644 --- a/modules/features2d/test/test_fast.cpp +++ b/modules/features2d/test/test_fast.cpp @@ -48,8 +48,8 @@ class CV_FastTest : public cvtest::BaseTest { public: CV_FastTest(); - ~CV_FastTest(); -protected: + ~CV_FastTest(); +protected: void run(int); }; @@ -58,13 +58,13 @@ CV_FastTest::~CV_FastTest() {} void CV_FastTest::run( int ) { - Mat image1 = imread(string(ts->get_data_path()) + "inpaint/orig.jpg"); - Mat image2 = imread(string(ts->get_data_path()) + "cameracalibration/chess9.jpg"); + Mat image1 = imread(string(ts->get_data_path()) + "inpaint/orig.jpg"); + Mat image2 = imread(string(ts->get_data_path()) + "cameracalibration/chess9.jpg"); string xml = string(ts->get_data_path()) + "fast/result.xml"; - + if (image1.empty() || image2.empty()) { - ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_TEST_DATA ); + ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_TEST_DATA ); return; } @@ -73,20 +73,20 @@ void CV_FastTest::run( int ) cvtColor(image2, gray2, CV_BGR2GRAY); vector keypoints1; - vector keypoints2; + vector keypoints2; FAST(gray1, keypoints1, 30); FAST(gray2, keypoints2, 30); for(size_t i = 0; i < keypoints1.size(); ++i) { const KeyPoint& kp = keypoints1[i]; - cv::circle(image1, kp.pt, cvRound(kp.size/2), CV_RGB(255, 0, 0)); + cv::circle(image1, kp.pt, cvRound(kp.size/2), CV_RGB(255, 0, 0)); } for(size_t i = 0; i < keypoints2.size(); ++i) { const KeyPoint& kp = keypoints2[i]; - cv::circle(image2, kp.pt, cvRound(kp.size/2), CV_RGB(255, 0, 0)); + cv::circle(image2, kp.pt, cvRound(kp.size/2), CV_RGB(255, 0, 0)); } Mat kps1(1, (int)(keypoints1.size() * sizeof(KeyPoint)), CV_8U, &keypoints1[0]); @@ -99,14 +99,14 @@ void CV_FastTest::run( int ) fs << "exp_kps1" << kps1; fs << "exp_kps2" << kps2; fs.release(); - } + } if (!fs.isOpened()) fs.open(xml, FileStorage::READ); - - Mat exp_kps1, exp_kps2; + + Mat exp_kps1, exp_kps2; read( fs["exp_kps1"], exp_kps1, Mat() ); - read( fs["exp_kps2"], exp_kps2, Mat() ); + read( fs["exp_kps2"], exp_kps2, Mat() ); fs.release(); if ( 0 != norm(exp_kps1, kps1, NORM_L2) || 0 != norm(exp_kps2, kps2, NORM_L2)) @@ -114,7 +114,7 @@ void CV_FastTest::run( int ) ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH); return; } - + /* cv::namedWindow("Img1"); cv::imshow("Img1", image1); cv::namedWindow("Img2"); cv::imshow("Img2", image2); cv::waitKey(0);*/ diff --git a/modules/features2d/test/test_mser.cpp b/modules/features2d/test/test_mser.cpp index 89e51c1f5..316bc0f39 100644 --- a/modules/features2d/test/test_mser.cpp +++ b/modules/features2d/test/test_mser.cpp @@ -50,8 +50,8 @@ using namespace cv; class CV_MserTest : public cvtest::BaseTest { public: - CV_MserTest(); -protected: + CV_MserTest(); +protected: void run(int); int LoadBoxes(const char* path, vector& boxes); int SaveBoxes(const char* path, const vector& boxes); @@ -71,7 +71,7 @@ int CV_MserTest::LoadBoxes(const char* path, vector& boxes) { return 0; } - + while (!feof(f)) { CvBox2D box; @@ -175,12 +175,12 @@ void CV_MserTest::run(int) { RotatedRect box = fitEllipse(msers[i]); box.angle=(float)CV_PI/2-box.angle; - boxes.push_back(box); + boxes.push_back(box); } string boxes_path = string(ts->get_data_path()) + "mser/boxes.txt"; string calc_boxes_path = string(ts->get_data_path()) + "mser/boxes.calc.txt"; - + if (!LoadBoxes(boxes_path.c_str(),boxes_orig)) { SaveBoxes(boxes_path.c_str(),boxes); diff --git a/modules/features2d/test/test_nearestneighbors.cpp b/modules/features2d/test/test_nearestneighbors.cpp index bdeb8fcde..8a0482218 100644 --- a/modules/features2d/test/test_nearestneighbors.cpp +++ b/modules/features2d/test/test_nearestneighbors.cpp @@ -128,7 +128,7 @@ void NearestNeighborTest::run( int /*start_from*/ ) { randu( desc, Scalar(minValue), Scalar(maxValue) ); createModel( desc ); - + tempCode = checkGetPoins( desc ); if( tempCode != cvtest::TS::OK ) { @@ -149,9 +149,9 @@ void NearestNeighborTest::run( int /*start_from*/ ) { ts->printf( cvtest::TS::LOG, "bad accuracy of Find \n" ); code = tempCode; } - + releaseModel(); - + ts->set_failed_test_info( code ); } @@ -398,7 +398,7 @@ void CV_FlannSavedIndexTest::createModel(const cv::Mat &data) } string filename = tempfile(); index->save( filename ); - + createIndex( data, SavedIndexParams(filename.c_str())); remove( filename.c_str() ); } diff --git a/modules/gpu/perf/perf_video.cpp b/modules/gpu/perf/perf_video.cpp index 71680c84c..4d617f61f 100644 --- a/modules/gpu/perf/perf_video.cpp +++ b/modules/gpu/perf/perf_video.cpp @@ -529,7 +529,7 @@ GPU_PERF_TEST(VideoWriter, cv::gpu::DeviceInfo, std::string) cv::gpu::setDevice(devInfo.deviceID()); std::string inputFile = perf::TestBase::getDataPath(std::string("gpu/video/") + GET_PARAM(1)); - std::string outputFile = inputFile.substr(0, inputFile.find('.')) + "_test.avi"; + std::string outputFile = cv::tempfile(".avi"); cv::VideoCapture reader(inputFile); ASSERT_TRUE( reader.isOpened() ); diff --git a/modules/gpu/perf_cpu/perf_video.cpp b/modules/gpu/perf_cpu/perf_video.cpp index ec4218202..f635f42b0 100644 --- a/modules/gpu/perf_cpu/perf_video.cpp +++ b/modules/gpu/perf_cpu/perf_video.cpp @@ -338,7 +338,7 @@ GPU_PERF_TEST(VideoWriter, cv::gpu::DeviceInfo, std::string) const double FPS = 25.0; std::string inputFile = perf::TestBase::getDataPath(std::string("gpu/video/") + GET_PARAM(1)); - std::string outputFile = inputFile.substr(0, inputFile.find('.')) + "_test.avi"; + std::string outputFile = cv::tempfile(".avi"); cv::VideoCapture reader(inputFile); ASSERT_TRUE( reader.isOpened() ); diff --git a/modules/gpu/test/test_video.cpp b/modules/gpu/test/test_video.cpp index 005355495..849f8dc88 100644 --- a/modules/gpu/test/test_video.cpp +++ b/modules/gpu/test/test_video.cpp @@ -687,7 +687,7 @@ PARAM_TEST_CASE(VideoWriter, cv::gpu::DeviceInfo, std::string) cv::gpu::setDevice(devInfo.deviceID()); inputFile = std::string(cvtest::TS::ptr()->get_data_path()) + "video/" + inputFile; - outputFile = inputFile.substr(0, inputFile.find('.')) + "_test.avi"; + outputFile = cv::tempfile(".avi"); } }; diff --git a/modules/highgui/test/test_ffmpeg.cpp b/modules/highgui/test/test_ffmpeg.cpp index 88427c555..fb32e015f 100644 --- a/modules/highgui/test/test_ffmpeg.cpp +++ b/modules/highgui/test/test_ffmpeg.cpp @@ -59,7 +59,7 @@ public: const int img_c = 4096; const double fps0 = 15; const double time_sec = 1; - + const size_t n = sizeof(codec_bmp_tags)/sizeof(codec_bmp_tags[0]); bool created = false; @@ -68,7 +68,7 @@ public: { stringstream s; s << codec_bmp_tags[j].tag; int tag = codec_bmp_tags[j].tag; - + if( tag != MKTAG('H', '2', '6', '3') && tag != MKTAG('H', '2', '6', '1') && //tag != MKTAG('D', 'I', 'V', 'X') && @@ -93,7 +93,7 @@ public: { double fps = fps0; Size frame_s = Size(img_c, img_r); - + if( tag == CV_FOURCC('H', '2', '6', '1') ) frame_s = Size(352, 288); else if( tag == CV_FOURCC('H', '2', '6', '3') ) @@ -101,10 +101,10 @@ public: /*else if( tag == CV_FOURCC('M', 'J', 'P', 'G') || tag == CV_FOURCC('j', 'p', 'e', 'g') ) frame_s = Size(1920, 1080);*/ - + if( tag == CV_FOURCC('M', 'P', 'E', 'G') ) fps = 25; - + VideoWriter writer(filename, tag, fps, frame_s); if (writer.isOpened() == false) @@ -157,9 +157,9 @@ public: Mat img, img_next; cap >> img; cap >> img_next; - + CV_Assert( !img0.empty() && !img.empty() && img_next.empty() ); - + double diff = norm(img0, img, CV_C); CV_Assert( diff == 0 ); } diff --git a/modules/highgui/test/test_grfmt.cpp b/modules/highgui/test/test_grfmt.cpp index 5923b628e..f590c637d 100644 --- a/modules/highgui/test/test_grfmt.cpp +++ b/modules/highgui/test/test_grfmt.cpp @@ -59,7 +59,7 @@ public: ts->printf(cvtest::TS::LOG, "finish reading big image\n"); if (img.empty()) ts->set_failed_test_info(cvtest::TS::FAIL_INVALID_TEST_DATA); ts->printf(cvtest::TS::LOG, "start writing big image\n"); - imwrite(string(ts->get_data_path()) + "readwrite/write.png", img); + imwrite(cv::tempfile(".png"), img); ts->printf(cvtest::TS::LOG, "finish writing big image\n"); } catch(...) @@ -72,10 +72,14 @@ public: string ext_from_int(int ext) { +#ifdef HAVE_PNG if (ext == 0) return ".png"; +#endif if (ext == 1) return ".bmp"; if (ext == 2) return ".pgm"; +#ifdef HAVE_TIFF if (ext == 3) return ".tiff"; +#endif return ""; } @@ -92,16 +96,21 @@ public: for (int k = 1; k <= 5; ++k) { for (int ext = 0; ext < 4; ++ext) // 0 - png, 1 - bmp, 2 - pgm, 3 - tiff + { + if(ext_from_int(ext).empty()) + continue; for (int num_channels = 1; num_channels <= 3; num_channels+=2) { ts->printf(ts->LOG, "image type depth:%d channels:%d ext: %s\n", CV_8U, num_channels, ext_from_int(ext).c_str()); Mat img(img_r * k, img_c * k, CV_MAKETYPE(CV_8U, num_channels), Scalar::all(0)); circle(img, Point2i((img_c * k) / 2, (img_r * k) / 2), cv::min((img_r * k), (img_c * k)) / 4 , Scalar::all(255)); - ts->printf(ts->LOG, "writing image : %s\n", string(string(ts->get_data_path()) + "readwrite/test" + ext_from_int(ext)).c_str()); - imwrite(string(ts->get_data_path()) + "readwrite/test" + ext_from_int(ext), img); - ts->printf(ts->LOG, "reading test image : %s\n", string(string(ts->get_data_path()) + "readwrite/test" + ext_from_int(ext)).c_str()); - Mat img_test = imread(string(ts->get_data_path()) + "readwrite/test" + ext_from_int(ext), CV_LOAD_IMAGE_UNCHANGED); + string img_path = cv::tempfile(ext_from_int(ext).c_str()); + ts->printf(ts->LOG, "writing image : %s\n", img_path.c_str()); + imwrite(img_path, img); + + ts->printf(ts->LOG, "reading test image : %s\n", img_path.c_str()); + Mat img_test = imread(img_path, CV_LOAD_IMAGE_UNCHANGED); if (img_test.empty()) ts->set_failed_test_info(ts->FAIL_MISMATCH); @@ -115,14 +124,17 @@ public: ts->set_failed_test_info(ts->FAIL_MISMATCH); } } + } +#ifdef HAVE_JPEG for (int num_channels = 1; num_channels <= 3; num_channels+=2) { // jpeg ts->printf(ts->LOG, "image type depth:%d channels:%d ext: %s\n", CV_8U, num_channels, ".jpg"); Mat img(img_r * k, img_c * k, CV_MAKETYPE(CV_8U, num_channels), Scalar::all(0)); circle(img, Point2i((img_c * k) / 2, (img_r * k) / 2), cv::min((img_r * k), (img_c * k)) / 4 , Scalar::all(255)); - string filename = string(ts->get_data_path() + "readwrite/test_" + char(k + 48) + "_c" + char(num_channels + 48) + "_.jpg"); + + string filename = cv::tempfile(".jpg"); imwrite(filename, img); img = imread(filename, CV_LOAD_IMAGE_UNCHANGED); @@ -142,14 +154,17 @@ public: ts->set_failed_test_info(ts->FAIL_MISMATCH); } } +#endif +#ifdef HAVE_TIFF for (int num_channels = 1; num_channels <= 3; num_channels+=2) { // tiff ts->printf(ts->LOG, "image type depth:%d channels:%d ext: %s\n", CV_16U, num_channels, ".tiff"); Mat img(img_r * k, img_c * k, CV_MAKETYPE(CV_16U, num_channels), Scalar::all(0)); circle(img, Point2i((img_c * k) / 2, (img_r * k) / 2), cv::min((img_r * k), (img_c * k)) / 4 , Scalar::all(255)); - string filename = string(ts->get_data_path() + "readwrite/test.tiff"); + + string filename = cv::tempfile(".tiff"); imwrite(filename, img); ts->printf(ts->LOG, "reading test image : %s\n", filename.c_str()); Mat img_test = imread(filename, CV_LOAD_IMAGE_UNCHANGED); @@ -171,6 +186,7 @@ public: ts->set_failed_test_info(ts->FAIL_MISMATCH); } } +#endif } } catch(const cv::Exception & e) @@ -205,9 +221,7 @@ public: TEST(Highgui_Image, write_big) { CV_GrfmtWriteBigImageTest test; test.safe_run(); } #endif -#if defined(HAVE_PNG) && defined(HAVE_TIFF) && defined(HAVE_JPEG) TEST(Highgui_Image, write_imageseq) { CV_GrfmtWriteSequenceImageTest test; test.safe_run(); } -#endif TEST(Highgui_Image, read_bmp_rle8) { CV_GrfmtReadBMPRLE8Test test; test.safe_run(); } diff --git a/modules/highgui/test/test_video_io.cpp b/modules/highgui/test/test_video_io.cpp index 3134b8e31..e85fa5e13 100644 --- a/modules/highgui/test/test_video_io.cpp +++ b/modules/highgui/test/test_video_io.cpp @@ -155,7 +155,7 @@ void CV_HighGuiTest::ImageTest(const string& dir) for(size_t i = 0; i < ext_num; ++i) { string ext = exts[i]; - string full_name = "img." + ext; + string full_name = cv::tempfile(ext.c_str()); ts->printf(ts->LOG, " full_name : %s\n", full_name.c_str()); imwrite(full_name, image); @@ -225,7 +225,7 @@ void CV_HighGuiTest::ImageTest(const string& dir) void CV_HighGuiTest::VideoTest(const string& dir, const cvtest::VideoFormat& fmt) { string src_file = dir + "../cv/shared/video_for_test.avi"; - string tmp_name = format("video_%s.%s", cvtest::fourccToString(fmt.fourcc).c_str(), fmt.ext.c_str()); + string tmp_name = cv::tempfile((cvtest::fourccToString(fmt.fourcc) + "." + fmt.ext).c_str()); ts->printf(ts->LOG, "reading video : %s and converting it to %s\n", src_file.c_str(), tmp_name.c_str()); @@ -291,8 +291,8 @@ void CV_HighGuiTest::VideoTest(const string& dir, const cvtest::VideoFormat& fmt if (psnr < thresDbell) { printf("Too low psnr = %gdb\n", psnr); - imwrite("img.png", img); - imwrite("img1.png", img1); + // imwrite("img.png", img); + // imwrite("img1.png", img1); ts->set_failed_test_info(ts->FAIL_MISMATCH); break; } @@ -323,7 +323,7 @@ void CV_HighGuiTest::SpecificImageTest(const string& dir) stringstream s_digit; s_digit << i; - string full_name = "img_"+s_digit.str()+".bmp"; + string full_name = cv::tempfile((s_digit.str() + ".bmp").c_str()); ts->printf(ts->LOG, " full_name : %s\n", full_name.c_str()); imwrite(full_name, image); @@ -395,7 +395,7 @@ void CV_HighGuiTest::SpecificVideoTest(const string& dir, const cvtest::VideoFor int fourcc = fmt.fourcc; string fourcc_str = cvtest::fourccToString(fourcc); - const string video_file = "video_" + fourcc_str + "." + ext; + const string video_file = cv::tempfile((fourcc_str + "." + ext).c_str()); Size frame_size(968 & -2, 757 & -2); VideoWriter writer(video_file, fourcc, 25, frame_size, true); diff --git a/modules/highgui/test/test_video_pos.cpp b/modules/highgui/test/test_video_pos.cpp index d350b4589..92904f5df 100755 --- a/modules/highgui/test/test_video_pos.cpp +++ b/modules/highgui/test/test_video_pos.cpp @@ -53,29 +53,27 @@ public: { framesize = Size(640, 480); } - + Mat drawFrame(int i) { Mat mat = Mat::zeros(framesize, CV_8UC3); - + mat = Scalar(fabs(cos(i*0.08)*255), fabs(sin(i*0.05)*255), i); putText(mat, format("%03d", i), Point(10, 350), 0, 10, Scalar(128, 255, 255), 15); return mat; } - + string getFilename(const cvtest::VideoFormat& fmt) { - return format("test_video_%s.%s", cvtest::fourccToString(fmt.fourcc).c_str(), fmt.ext.c_str()); + return cv::tempfile((cvtest::fourccToString(fmt.fourcc) + "." + fmt.ext).c_str()); } - - bool CreateTestVideo(const cvtest::VideoFormat& fmt, int framecount) + + bool CreateTestVideo(const cvtest::VideoFormat& fmt, int framecount, string filename) { - string filename = getFilename(fmt); - VideoWriter writer(filename, fmt.fourcc, 25, framesize, true); if( !writer.isOpened() ) return false; - + for (int i = 0; i < framecount; ++i) { Mat img = drawFrame(i); @@ -87,7 +85,7 @@ public: void run(int) { int n_frames = 100; - + for( int testcase = 0; ; testcase++ ) { const cvtest::VideoFormat& fmt = cvtest::g_specific_fmt_list[testcase]; @@ -96,82 +94,82 @@ public: string filename = getFilename(fmt); ts->printf(ts->LOG, "\nFile: %s\n", filename.c_str()); - if( !CreateTestVideo(fmt, n_frames) ) + if( !CreateTestVideo(fmt, n_frames, filename) ) { ts->printf(ts->LOG, "\nError: cannot create video file"); ts->set_failed_test_info(ts->FAIL_INVALID_OUTPUT); return; } - + VideoCapture cap(filename); - + if (!cap.isOpened()) { ts->printf(ts->LOG, "\nError: cannot read video file."); ts->set_failed_test_info(ts->FAIL_INVALID_TEST_DATA); return; } - + int N0 = (int)cap.get(CV_CAP_PROP_FRAME_COUNT); cap.set(CV_CAP_PROP_POS_FRAMES, 0); int N = (int)cap.get(CV_CAP_PROP_FRAME_COUNT); - + if (N != n_frames || N != N0) { ts->printf(ts->LOG, "\nError: returned frame count (N0=%d, N=%d) is different from the reference number %d\n", N0, N, n_frames); ts->set_failed_test_info(ts->FAIL_INVALID_OUTPUT); return; } - + for (int k = 0; k < N; ++k) { int idx = theRNG().uniform(0, N); - + if( !cap.set(CV_CAP_PROP_POS_FRAMES, idx) ) { ts->printf(ts->LOG, "\nError: cannot seek to frame %d.\n", idx); ts->set_failed_test_info(ts->FAIL_INVALID_OUTPUT); return; } - + int idx1 = (int)cap.get(CV_CAP_PROP_POS_FRAMES); - + Mat img; cap >> img; Mat img0 = drawFrame(idx); - + if( idx != idx1 ) { ts->printf(ts->LOG, "\nError: the current position (%d) after seek is different from specified (%d)\n", idx1, idx); ts->printf(ts->LOG, "Saving both frames ...\n"); ts->set_failed_test_info(ts->FAIL_INVALID_OUTPUT); - imwrite("opencv_test_highgui_postest_actual.png", img); - imwrite("opencv_test_highgui_postest_expected.png", img0); + // imwrite("opencv_test_highgui_postest_actual.png", img); + // imwrite("opencv_test_highgui_postest_expected.png", img0); return; } - + if (img.empty()) { ts->printf(ts->LOG, "\nError: cannot read a frame at position %d.\n", idx); ts->set_failed_test_info(ts->FAIL_INVALID_OUTPUT); return; } - + double err = PSNR(img, img0); - + if( err < 20 ) { ts->printf(ts->LOG, "The frame read after positioning to %d is incorrect (PSNR=%g)\n", idx, err); ts->printf(ts->LOG, "Saving both frames ...\n"); ts->set_failed_test_info(ts->FAIL_INVALID_OUTPUT); - imwrite("opencv_test_highgui_postest_actual.png", img); - imwrite("opencv_test_highgui_postest_expected.png", img0); + // imwrite("opencv_test_highgui_postest_actual.png", img); + // imwrite("opencv_test_highgui_postest_expected.png", img0); return; } } } } - + Size framesize; }; diff --git a/modules/imgproc/test/test_grabcut.cpp b/modules/imgproc/test/test_grabcut.cpp index fb4ff589b..caf2f5880 100644 --- a/modules/imgproc/test/test_grabcut.cpp +++ b/modules/imgproc/test/test_grabcut.cpp @@ -52,10 +52,10 @@ class CV_GrabcutTest : public cvtest::BaseTest { public: CV_GrabcutTest(); - ~CV_GrabcutTest(); + ~CV_GrabcutTest(); protected: bool verify(const Mat& mask, const Mat& exp); - void run(int); + void run(int); }; CV_GrabcutTest::CV_GrabcutTest() {} @@ -73,29 +73,29 @@ bool CV_GrabcutTest::verify(const Mat& mask, const Mat& exp) } void CV_GrabcutTest::run( int /* start_from */) -{ +{ cvtest::DefaultRngAuto defRng; - - Mat img = imread(string(ts->get_data_path()) + "shared/airplane.jpg"); + + Mat img = imread(string(ts->get_data_path()) + "shared/airplane.jpg"); Mat mask_prob = imread(string(ts->get_data_path()) + "grabcut/mask_prob.png", 0); Mat exp_mask1 = imread(string(ts->get_data_path()) + "grabcut/exp_mask1.png", 0); Mat exp_mask2 = imread(string(ts->get_data_path()) + "grabcut/exp_mask2.png", 0); - + if (img.empty() || (!mask_prob.empty() && img.size() != mask_prob.size()) || (!exp_mask1.empty() && img.size() != exp_mask1.size()) || (!exp_mask2.empty() && img.size() != exp_mask2.size()) ) { - ts->set_failed_test_info(cvtest::TS::FAIL_MISSING_TEST_DATA); + ts->set_failed_test_info(cvtest::TS::FAIL_MISSING_TEST_DATA); return; } - + Rect rect(Point(24, 126), Point(483, 294)); Mat exp_bgdModel, exp_fgdModel; Mat mask; mask = Scalar(0); Mat bgdModel, fgdModel; - grabCut( img, mask, rect, bgdModel, fgdModel, 0, GC_INIT_WITH_RECT ); + grabCut( img, mask, rect, bgdModel, fgdModel, 0, GC_INIT_WITH_RECT ); grabCut( img, mask, rect, bgdModel, fgdModel, 2, GC_EVAL ); // Multiply images by 255 for more visuality of test data. @@ -109,16 +109,16 @@ void CV_GrabcutTest::run( int /* start_from */) exp_mask1 = (mask & 1) * 255; imwrite(string(ts->get_data_path()) + "grabcut/exp_mask1.png", exp_mask1); } - + if (!verify((mask & 1) * 255, exp_mask1)) - { - ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH); + { + ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH); return; } - + mask = mask_prob; bgdModel.release(); - fgdModel.release(); + fgdModel.release(); rect = Rect(); grabCut( img, mask, rect, bgdModel, fgdModel, 0, GC_INIT_WITH_MASK ); grabCut( img, mask, rect, bgdModel, fgdModel, 1, GC_EVAL ); @@ -128,13 +128,13 @@ void CV_GrabcutTest::run( int /* start_from */) exp_mask2 = (mask & 1) * 255; imwrite(string(ts->get_data_path()) + "grabcut/exp_mask2.png", exp_mask2); } - + if (!verify((mask & 1) * 255, exp_mask2)) { - ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH); + ts->set_failed_test_info(cvtest::TS::FAIL_MISMATCH); return; - } - ts->set_failed_test_info(cvtest::TS::OK); + } + ts->set_failed_test_info(cvtest::TS::OK); } TEST(Imgproc_GrabCut, regression) { CV_GrabcutTest test; test.safe_run(); } diff --git a/modules/imgproc/test/test_watershed.cpp b/modules/imgproc/test/test_watershed.cpp index 7ab8fcb3d..e515c8239 100644 --- a/modules/imgproc/test/test_watershed.cpp +++ b/modules/imgproc/test/test_watershed.cpp @@ -50,8 +50,8 @@ class CV_WatershedTest : public cvtest::BaseTest { public: CV_WatershedTest(); - ~CV_WatershedTest(); -protected: + ~CV_WatershedTest(); +protected: void run(int); }; @@ -59,23 +59,23 @@ CV_WatershedTest::CV_WatershedTest() {} CV_WatershedTest::~CV_WatershedTest() {} void CV_WatershedTest::run( int /* start_from */) -{ - string exp_path = string(ts->get_data_path()) + "watershed/wshed_exp.png"; +{ + string exp_path = string(ts->get_data_path()) + "watershed/wshed_exp.png"; Mat exp = imread(exp_path, 0); Mat orig = imread(string(ts->get_data_path()) + "inpaint/orig.jpg"); FileStorage fs(string(ts->get_data_path()) + "watershed/comp.xml", FileStorage::READ); - + if (orig.empty() || !fs.isOpened()) { ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_TEST_DATA ); return; } - + CvSeq* cnts = (CvSeq*)fs["contours"].readObj(); Mat markers(orig.size(), CV_32SC1); markers = Scalar(0); - IplImage iplmrks = markers; + IplImage iplmrks = markers; vector colors(1); for(int i = 0; cnts != 0; cnts = cnts->h_next, ++i ) @@ -105,25 +105,25 @@ void CV_WatershedTest::run( int /* start_from */) if (pixel <= 0 || pixel > compNum) continue; // bad result, doing nothing and going to get error latter; - + // repaint in saved color to compare with expected; if(exp.data) - pixel = colors[pixel]; + pixel = colors[pixel]; } - } + } Mat markers8U; markers.convertTo(markers8U, CV_8U, 1, 1); - + if( exp.empty() || orig.size() != exp.size() ) { imwrite(exp_path, markers8U); exp = markers8U; } - + if (0 != norm(markers8U, exp, NORM_INF)) - { - ts->set_failed_test_info( cvtest::TS::FAIL_MISMATCH ); + { + ts->set_failed_test_info( cvtest::TS::FAIL_MISMATCH ); return; } ts->set_failed_test_info(cvtest::TS::OK); diff --git a/modules/legacy/test/test_em.cpp b/modules/legacy/test/test_em.cpp index 84b3af5ae..c03a9e42d 100644 --- a/modules/legacy/test/test_em.cpp +++ b/modules/legacy/test/test_em.cpp @@ -366,7 +366,7 @@ void CV_CvEMTest::run( int /*start_from*/ ) int currCode = runCase(caseIndex++, params, trainData, trainLabels, testData, testLabels, sizes); code = currCode == cvtest::TS::OK ? code : currCode; } - + ts->set_failed_test_info( code ); } @@ -382,7 +382,7 @@ protected: samples.at(0,0) = 1; samples.at(1,0) = 2; samples.at(2,0) = 3; - + Mat labels(samples.rows, 1, CV_32S); CvEMParams params; @@ -398,7 +398,7 @@ protected: // Write out - string filename = tempfile() + ".xml"; + string filename = cv::tempfile(".xml"); { FileStorage fs = FileStorage(filename, FileStorage::WRITE); try diff --git a/modules/legacy/test/test_stereomatching.cpp b/modules/legacy/test/test_stereomatching.cpp index 34b6abdf9..a6524bb71 100644 --- a/modules/legacy/test/test_stereomatching.cpp +++ b/modules/legacy/test/test_stereomatching.cpp @@ -421,7 +421,7 @@ void CV_StereoMatchingTest::run(int) ts->set_failed_test_info( code ); return; } - + string fullResultFilename = dataPath + ALGORITHMS_DIR + algorithmName + RESULT_FILE; FileStorage resFS( fullResultFilename, FileStorage::READ ); bool isWrite = true; // write or compare results @@ -660,7 +660,7 @@ class CV_StereoGCTest : public CV_StereoMatchingTest public: CV_StereoGCTest() { - name = "stereogc"; + name = "stereogc"; fill(rmsEps.begin(), rmsEps.end(), 3.f); fracEps[0] = 0.05f; // all fracEps[1] = 0.05f; // noOccl diff --git a/modules/ml/test/test_emknearestkmeans.cpp b/modules/ml/test/test_emknearestkmeans.cpp index 9f8560872..fc6214e7e 100644 --- a/modules/ml/test/test_emknearestkmeans.cpp +++ b/modules/ml/test/test_emknearestkmeans.cpp @@ -527,7 +527,7 @@ protected: firstResult.at(i) = static_cast(em.predict(samples.row(i))[1]); // Write out - string filename = tempfile() + ".xml"; + string filename = cv::tempfile(".xml"); { FileStorage fs = FileStorage(filename, FileStorage::WRITE); try diff --git a/modules/ml/test/test_precomp.hpp b/modules/ml/test/test_precomp.hpp index 407ad9d32..7f820b47d 100644 --- a/modules/ml/test/test_precomp.hpp +++ b/modules/ml/test/test_precomp.hpp @@ -62,7 +62,7 @@ protected: class CV_AMLTest : public CV_MLBaseTest { public: - CV_AMLTest( const char* _modelName ); + CV_AMLTest( const char* _modelName ); protected: virtual int run_test_case( int testCaseIdx ); virtual int validate_test_results( int testCaseIdx ); @@ -71,7 +71,7 @@ protected: class CV_SLMLTest : public CV_MLBaseTest { public: - CV_SLMLTest( const char* _modelName ); + CV_SLMLTest( const char* _modelName ); protected: virtual int run_test_case( int testCaseIdx ); virtual int validate_test_results( int testCaseIdx ); diff --git a/modules/ml/test/test_save_load.cpp b/modules/ml/test/test_save_load.cpp index bc6ffab7c..707ba911c 100644 --- a/modules/ml/test/test_save_load.cpp +++ b/modules/ml/test/test_save_load.cpp @@ -84,7 +84,7 @@ int CV_SLMLTest::validate_test_results( int testCaseIdx ) // 1. compare files ifstream f1( fname1.c_str() ), f2( fname2.c_str() ); string s1, s2; - int lineIdx = 0; + int lineIdx = 0; CV_Assert( f1.is_open() && f2.is_open() ); for( ; !f1.eof() && !f2.eof(); lineIdx++ ) { diff --git a/modules/objdetect/test/test_latentsvmdetector.cpp b/modules/objdetect/test/test_latentsvmdetector.cpp index 21ec4be82..683d21cbd 100644 --- a/modules/objdetect/test/test_latentsvmdetector.cpp +++ b/modules/objdetect/test/test_latentsvmdetector.cpp @@ -44,7 +44,7 @@ #include -#ifdef HAVE_CVCONFIG_H +#ifdef HAVE_CVCONFIG_H #include "cvconfig.h" #endif @@ -61,7 +61,7 @@ const CvRect true_bounding_boxes[3] = {cvRect(0, 45, 362, 452), cvRect(304, 0, 6 class CV_LatentSVMDetectorTest : public cvtest::BaseTest { -protected: +protected: void run(int); bool isEqual(CvRect r1, CvRect r2, int eps); }; @@ -75,7 +75,7 @@ bool CV_LatentSVMDetectorTest::isEqual(CvRect r1, CvRect r2, int eps) } void CV_LatentSVMDetectorTest::run( int /* start_from */) -{ +{ string img_path = string(ts->get_data_path()) + "latentsvmdetector/cat.jpg"; string model_path = string(ts->get_data_path()) + "latentsvmdetector/models_VOC2007/cat.xml"; int numThreads = -1; @@ -102,7 +102,7 @@ void CV_LatentSVMDetectorTest::run( int /* start_from */) } CvMemStorage* storage = cvCreateMemStorage(0); - CvSeq* detections = 0; + CvSeq* detections = 0; detections = cvLatentSvmDetectObjects(image, detector, storage, 0.5f, numThreads); if (detections->total != num_detections) { diff --git a/modules/photo/test/test_inpaint.cpp b/modules/photo/test/test_inpaint.cpp index b1da5cc99..a047dbee7 100644 --- a/modules/photo/test/test_inpaint.cpp +++ b/modules/photo/test/test_inpaint.cpp @@ -49,8 +49,8 @@ class CV_InpaintTest : public cvtest::BaseTest { public: CV_InpaintTest(); - ~CV_InpaintTest(); -protected: + ~CV_InpaintTest(); +protected: void run(int); }; @@ -61,43 +61,40 @@ CV_InpaintTest::~CV_InpaintTest() {} void CV_InpaintTest::run( int ) { - string folder = string(ts->get_data_path()) + "inpaint/"; - Mat orig = imread(folder + "orig.jpg"); + string folder = string(ts->get_data_path()) + "inpaint/"; + Mat orig = imread(folder + "orig.jpg"); Mat exp1 = imread(folder + "exp1.png"); Mat exp2 = imread(folder + "exp2.png"); - Mat mask = imread(folder + "mask.png"); + Mat mask = imread(folder + "mask.png"); if (orig.empty() || exp1.empty() || exp2.empty() || mask.empty()) { - ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_TEST_DATA ); + ts->set_failed_test_info( cvtest::TS::FAIL_INVALID_TEST_DATA ); return; } - Mat inv_mask; + Mat inv_mask; mask.convertTo(inv_mask, CV_8UC3, -1.0, 255.0); - + Mat mask1ch; cv::cvtColor(mask, mask1ch, CV_BGR2GRAY); Mat test = orig.clone(); - test.setTo(Scalar::all(255), mask1ch); + test.setTo(Scalar::all(255), mask1ch); Mat res1, res2; inpaint( test, mask1ch, res1, 5, CV_INPAINT_NS ); - inpaint( test, mask1ch, res2, 5, CV_INPAINT_TELEA ); - - imwrite("d:/exp1.png", res1); - imwrite("d:/exp2.png", res2); - + inpaint( test, mask1ch, res2, 5, CV_INPAINT_TELEA ); + Mat diff1, diff2; absdiff( orig, res1, diff1 ); absdiff( orig, res2, diff2 ); - + double n1 = norm(diff1.reshape(1), NORM_INF, inv_mask.reshape(1)); double n2 = norm(diff2.reshape(1), NORM_INF, inv_mask.reshape(1)); - + if (n1 != 0 || n2 != 0) - { + { ts->set_failed_test_info( cvtest::TS::FAIL_MISMATCH ); return; } @@ -109,9 +106,9 @@ void CV_InpaintTest::run( int ) n2 = norm(diff2.reshape(1), NORM_INF, mask.reshape(1)); const int jpeg_thres = 3; - if (n1 > jpeg_thres || n2 > jpeg_thres) + if (n1 > jpeg_thres || n2 > jpeg_thres) { - ts->set_failed_test_info( cvtest::TS::FAIL_BAD_ACCURACY ); + ts->set_failed_test_info( cvtest::TS::FAIL_BAD_ACCURACY ); return; } diff --git a/modules/python/src2/gen.py b/modules/python/src2/gen.py index d9bed76c9..2ffb44544 100644 --- a/modules/python/src2/gen.py +++ b/modules/python/src2/gen.py @@ -37,8 +37,6 @@ for l in open("%s/api" % sys.argv[1]): # Validation: check that any optional arguments are last had_error = False for (f, args, ty, flags) in api: - if f == 'PolarToCart': - print f, [(a.init != None) for a in args] has_init = [(a.init != None) for a in args if not 'O' in a.flags] if True in has_init and not all(has_init[has_init.index(True):]): print 'Error in definition for "%s", optional arguments must be last' % f @@ -130,7 +128,7 @@ def has_optional(al): def gen(name, args, ty, flags): yield "" if has_optional(args): - yield "static PyObject *pycv%s(PyObject *self, PyObject *args, PyObject *kw)" % cname(name) + yield "static PyObject *pycv%s(PyObject *self, PyObject *args, PyObject *kw)" % cname(name) else: yield "static PyObject *pycv%s(PyObject *self, PyObject *args)" % cname(name) if 'doconly' in flags: @@ -185,7 +183,7 @@ def gen(name, args, ty, flags): in_args = [ a for a in args if not 'O' in a.flags ] fmt0 = "".join([ fmap[a.ty] for a in in_args if not a.init]) fmt1 = "".join([ fmap[a.ty] for a in in_args if a.init]) - + yield '' if len(fmt0 + fmt1) > 0: if len(fmt1) > 0: diff --git a/modules/ts/misc/run.py b/modules/ts/misc/run.py index f62e4a499..cac280be6 100644 --- a/modules/ts/misc/run.py +++ b/modules/ts/misc/run.py @@ -96,13 +96,13 @@ def query_yes_no(stdout, question, default="yes"): else: stdout.write("Please respond with 'yes' or 'no' "\ "(or 'y' or 'n').\n") - + def getRunningProcessExePathByName_win32(name): from ctypes import windll, POINTER, pointer, Structure, sizeof from ctypes import c_long , c_int , c_uint , c_char , c_ubyte , c_char_p , c_void_p - + class PROCESSENTRY32(Structure): - _fields_ = [ ( 'dwSize' , c_uint ) , + _fields_ = [ ( 'dwSize' , c_uint ) , ( 'cntUsage' , c_uint) , ( 'th32ProcessID' , c_uint) , ( 'th32DefaultHeapID' , c_uint) , @@ -111,25 +111,25 @@ def getRunningProcessExePathByName_win32(name): ( 'th32ParentProcessID' , c_uint) , ( 'pcPriClassBase' , c_long) , ( 'dwFlags' , c_uint) , - ( 'szExeFile' , c_char * 260 ) , + ( 'szExeFile' , c_char * 260 ) , ( 'th32MemoryBase' , c_long) , ( 'th32AccessKey' , c_long ) ] - + class MODULEENTRY32(Structure): - _fields_ = [ ( 'dwSize' , c_long ) , + _fields_ = [ ( 'dwSize' , c_long ) , ( 'th32ModuleID' , c_long ), ( 'th32ProcessID' , c_long ), ( 'GlblcntUsage' , c_long ), ( 'ProccntUsage' , c_long ) , ( 'modBaseAddr' , c_long ) , - ( 'modBaseSize' , c_long ) , + ( 'modBaseSize' , c_long ) , ( 'hModule' , c_void_p ) , ( 'szModule' , c_char * 256 ), ( 'szExePath' , c_char * 260 ) ] - + TH32CS_SNAPPROCESS = 2 TH32CS_SNAPMODULE = 0x00000008 - + ## CreateToolhelp32Snapshot CreateToolhelp32Snapshot= windll.kernel32.CreateToolhelp32Snapshot CreateToolhelp32Snapshot.reltype = c_long @@ -150,7 +150,7 @@ def getRunningProcessExePathByName_win32(name): Module32First = windll.kernel32.Module32First Module32First.argtypes = [ c_void_p , POINTER(MODULEENTRY32) ] Module32First.rettype = c_int - + hProcessSnap = c_void_p(0) hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS , 0 ) @@ -180,7 +180,7 @@ def getRunningProcessExePathByName_posix(name): for pid in pids: try: path = os.readlink(os.path.join('/proc', pid, 'exe')) - if path and path.endswith(name): + if path and path.endswith(name): return path except: pass @@ -195,7 +195,7 @@ def getRunningProcessExePathByName(name): return None except: return None - + class RunInfo(object): def setCallback(self, name, callback): setattr(self, name, callback) @@ -224,7 +224,7 @@ class RunInfo(object): except: pass cachefile.close() - + # fix empty tests dir if not self.tests_dir: self.tests_dir = self.path @@ -236,12 +236,12 @@ class RunInfo(object): else: self.adb = None - # detect target platform + # detect target platform if self.android_executable or self.android_abi or self.ndk_path: self.targetos = "android" else: self.targetos = hostos - + if self.targetos == "android": # fix adb tool location if not self.adb: @@ -250,7 +250,7 @@ class RunInfo(object): self.adb = "adb" if options.adb_serial: self.adb = [self.adb, "-s", options.adb_serial] - else: + else: self.adb = [self.adb] try: output = Popen(self.adb + ["shell", "ls"], stdout=PIPE, stderr=PIPE).communicate() @@ -317,23 +317,23 @@ class RunInfo(object): self.targetarch = "x86" else: self.targetarch = "unknown" - + # fix CUDA attributes self.with_cuda = self.with_cuda == "ON" if self.cuda_library and self.cuda_library.endswith("-NOTFOUND"): self.cuda_library = None self.has_cuda = self.with_cuda and self.cuda_library and self.targetarch in ["x86", "x64"] - + self.hardware = None - + self.getSvnVersion(self.cmake_home, "cmake_home_svn") if self.opencv_home == self.cmake_home: self.opencv_home_svn = self.cmake_home_svn else: self.getSvnVersion(self.opencv_home, "opencv_home_svn") - + self.tests = self.getAvailableTestApps() - + def getSvnVersion(self, path, name): if not path: setattr(self, name, None) @@ -352,7 +352,7 @@ class RunInfo(object): setattr(self, name, None) except OSError: setattr(self, name, None) - + def tryGetSvnVersionWithTortoise(self, path, name): try: wcrev = "SubWCRev.exe" @@ -377,7 +377,7 @@ class RunInfo(object): if dir: import shutil shutil.rmtree(dir) - + def isTest(self, fullpath): if not os.path.isfile(fullpath): return False @@ -388,14 +388,14 @@ class RunInfo(object): if self.targetos == "android" and fullpath.endswith(".apk"): return True return True - + def getAvailableTestApps(self): 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)] return files return [] - + def getLogName(self, app, timestamp): app = os.path.basename(app) if app.endswith(".exe"): @@ -508,17 +508,17 @@ class RunInfo(object): hw = "" tstamp = timestamp.strftime("%Y-%m-%d--%H-%M-%S") return "%s_%s_%s_%s%s%s.xml" % (app, self.targetos, self.targetarch, hw, rev, tstamp) - + def getTest(self, name): # full path if self.isTest(name): return name - + # name only fullname = os.path.join(self.tests_dir, name) if self.isTest(fullname): return fullname - + # name without extension fullname += ".exe" if self.isTest(fullname): @@ -527,7 +527,7 @@ class RunInfo(object): fullname += ".apk" if self.isTest(fullname): return fullname - + # short name for OpenCV tests for t in self.tests: if t == name: @@ -547,7 +547,7 @@ class RunInfo(object): if fname == name: return t return None - + def runAdb(self, *args): cmd = self.adb[:] cmd.extend(args) @@ -559,7 +559,7 @@ class RunInfo(object): except OSError: pass return None - + def isRunnable(self): if self.error: return False @@ -585,7 +585,7 @@ class RunInfo(object): if hw: self.hardware = hw.groups()[0].strip() return True - + def runTest(self, path, workingDir, _stdout, _stderr, args = []): if self.error: return @@ -593,13 +593,13 @@ class RunInfo(object): timestamp = datetime.datetime.now() logfile = self.getLogName(path, timestamp) exe = os.path.abspath(path) - + userlog = [a for a in args if a.startswith("--gtest_output=")] if len(userlog) == 0: args.append("--gtest_output=xml:" + logfile) else: logfile = userlog[0][userlog[0].find(":")+1:] - + if self.targetos == "android" and exe.endswith(".apk"): print "running java tests:", exe try: @@ -653,10 +653,11 @@ class RunInfo(object): elif self.targetos == "android": hostlogpath = "" usercolor = [a for a in args if a.startswith("--gtest_color=")] - if len(userlog) == 0 and _stdout.isatty() and hostos != "nt": + if len(usercolor) == 0 and _stdout.isatty() and hostos != "nt": args.append("--gtest_color=yes") try: - andoidcwd = "/data/bin/" + getpass.getuser().replace(" ","") + "_" + self.options.mode +"/" + tempdir = "/data/local/tmp/" + andoidcwd = tempdir + getpass.getuser().replace(" ","") + "_" + self.options.mode +"/" exename = os.path.basename(exe) androidexe = andoidcwd + exename #upload @@ -692,6 +693,9 @@ class RunInfo(object): return #rm log Popen(self.adb + ["shell", "rm " + andoidcwd + logfile], stdout=_stdout, stderr=_stderr).wait() + + # clean temporary files + Popen(self.adb + ["shell", "rm " + tempdir + "__opencv_temp.*"], stdout=_stdout, stderr=_stderr).wait() except OSError: pass if os.path.isfile(hostlogpath): @@ -704,16 +708,27 @@ class RunInfo(object): else: cmd.extend(args) print >> _stderr, "Running:", " ".join(cmd) - try: + try: Popen(cmd, stdout=_stdout, stderr=_stderr, cwd = workingDir).wait() except OSError: pass - + + # clean temporary files + temp_path = os.environ.get('OPENCV_TEMP_PATH') + if not temp_path: + if hostos == "nt": + temp_path = tempfile.gettempdir() + else: + temp_path = "/tmp" + + for filename in glob.glob(os.path.join(temp_path, "__opencv_temp.*")) : + os.remove( filename ) + logpath = os.path.join(workingDir, logfile) if os.path.isfile(logpath): return logpath return None - + def runTests(self, tests, _stdout, _stderr, workingDir, args = []): if self.error: return [] @@ -747,10 +762,10 @@ def getRunArgs(args): if __name__ == "__main__": test_args = [a for a in sys.argv if a.startswith("--perf_") or a.startswith("--gtest_")] argv = [a for a in sys.argv if not(a.startswith("--perf_") or a.startswith("--gtest_"))] - + parser = OptionParser() parser.add_option("-t", "--tests", dest="tests", help="comma-separated list of modules to test", metavar="SUITS", default="") - + parser.add_option("-w", "--cwd", dest="cwd", help="working directory for tests", metavar="PATH", default=".") parser.add_option("-a", "--accuracy", dest="accuracy", help="look for accuracy tests instead of performance tests", action="store_true", default=False) parser.add_option("-l", "--longname", dest="useLongNames", action="store_true", help="generate log files with long names", default=False) @@ -759,26 +774,26 @@ if __name__ == "__main__": parser.add_option("", "--serial", dest="adb_serial", help="Android: directs command to the USB device or emulator with the given serial number", metavar="serial number", default="") parser.add_option("", "--package", dest="junit_package", help="Android: run jUnit tests for specified package", metavar="package", default="") parser.add_option("", "--help-tests", dest="help", help="Show help for test executable", action="store_true", default=False) - + (options, args) = parser.parse_args(argv) if options.accuracy: options.mode = "test" else: options.mode = "perf" - + run_args = getRunArgs(args[1:] or ['.']) - + if len(run_args) == 0: print >> sys.stderr, "Usage:\n", os.path.basename(sys.argv[0]), "" exit(1) - + tests = [s.strip() for s in options.tests.split(",") if s] - + if len(tests) != 1 or len(run_args) != 1: #remove --gtest_output from params test_args = [a for a in test_args if not a.startswith("--gtest_output=")] - + logs = [] for path in run_args: info = RunInfo(path, options) @@ -789,5 +804,5 @@ if __name__ == "__main__": info.test_data_path = options.test_data_path logs.extend(info.runTests(tests, sys.stdout, sys.stderr, options.cwd, test_args)) - if logs: + if logs: print >> sys.stderr, "Collected:", " ".join(logs)